diff options
Diffstat (limited to 'bindings/perl/Sword.xs')
-rw-r--r-- | bindings/perl/Sword.xs | 254 |
1 files changed, 0 insertions, 254 deletions
diff --git a/bindings/perl/Sword.xs b/bindings/perl/Sword.xs deleted file mode 100644 index e78c3aa..0000000 --- a/bindings/perl/Sword.xs +++ /dev/null @@ -1,254 +0,0 @@ - -#ifdef __cplusplus -extern "C" { -#endif -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" -#ifdef __cplusplus -} -#endif - -#undef list - -#include <iostream.h> -#include <swmgr.h> -#include <swmodule.h> -#include <versekey.h> -#include <localemgr.h> - -SWMgr manager; - -class VerseIterator { -public: - SWModule * module; - VerseKey key; - VerseIterator(char * module_name); - ~VerseIterator(); - - // Iterator info - const char * get_module_name() { return module->Name(); } - - // Verse info - const char * get_verse() { module->SetKey(key); return (const char*)*module; } - const char * get_key() { return key; } - - // Iteration - int next(int how_far); - int prev(int how_far); - - // Go to verse - int go_to_verse(char * verse); - - // Book / Chapter / Verse traversal - const char * get_book() { return key.books[key.Testament() - 1][key.Book() - 1].name; } - int get_chapter_num() { return key.Chapter(); } - int get_verse_num() { return key.Verse(); } - - void set_chapter_num(int chapter_num) { key.Chapter(chapter_num); } - void set_verse_num(int verse_num) { key.Verse(verse_num); } - - // Stuff that should go into some sort of Module class - char * _get_module_name() { return module->Name(); } - char * _get_module_desc() { return module->Description(); } - char * _get_module_type() { return module->Type(); } - int _verse_greater(char * verse1, char * verse2); -}; - -VerseIterator::VerseIterator(char * module_name) { - module = manager.Modules[module_name]; - key = module->Key(); - key.setLocale(LocaleMgr::systemLocaleMgr.getDefaultLocaleName()); - - key = key.LowerBound(); -} - -VerseIterator::~VerseIterator() { -} - -int VerseIterator::next(int how_far) { - if(key == key.UpperBound()) { - return 0; - } - module->SetKey(key); - (*module) += how_far; - key = module->Key(); - return 1; -} - -int VerseIterator::prev(int how_far) { - if(key == key.LowerBound()) { - return 0; - } - module->SetKey(key); - (*module) -= how_far; - key = module->Key(); - return 1; -} - -int VerseIterator::go_to_verse(char * verse) { - int retval = module->SetKey(verse); - key = module->Key(); - return ! retval; -} - -int VerseIterator::_verse_greater(char * verse1, char * verse2) { - if(module->SetKey(verse1)) { - return -1; - } - SWKey key1 = module->Key(); - if(module->SetKey(verse2)) { - return -1; - } - SWKey key2 = module->Key(); - return key1 > key2; -} - -MODULE = Sword PACKAGE = Sword - -void -get_modules(char * textType = "Biblical Texts") -PPCODE: - ModMap::iterator modIterator; - for (modIterator = manager.Modules.begin(); modIterator != manager.Modules.end(); modIterator++) { - SWModule *module = (*modIterator).second; - if(!strcmp(module->Type(),textType)) { - string s = (*modIterator).first; - XPUSHs(sv_2mortal(newSVpv(s.c_str(), s.length()))); - } - } - -void -get_locales() -PPCODE: - LocaleMgr lm = LocaleMgr::systemLocaleMgr; - list<string> loclist = lm.getAvailableLocales(); - list<string>::iterator li = loclist.begin(); - for (;li != loclist.end(); li++) { - XPUSHs(sv_2mortal(newSVpv(li->c_str(), li->length()))); - } - -void -set_locale(char * locale) -CODE: - LocaleMgr::systemLocaleMgr.setDefaultLocaleName(locale); - - -MODULE = Sword PACKAGE = Sword::VerseIterator - -VerseIterator * -VerseIterator::new(char * module_name) - -void -VerseIterator::DESTROY() - -const char * -VerseIterator::get_module_name() - -const char * -VerseIterator::get_verse() - -const char * -VerseIterator::get_key() - - -int -VerseIterator::next(int how_far = 1) - -int -VerseIterator::prev(int how_far = 1) - - -int -VerseIterator::go_to_verse(char * verse) - - -const char * -VerseIterator::get_book() - -int -VerseIterator::get_chapter_num() - -int -VerseIterator::get_verse_num() - -void -VerseIterator::set_chapter_num(int chapter_num) - -void -VerseIterator::set_verse_num(int verse_num) - - -void -VerseIterator::_get_books() -PPCODE: - - for(int testament_num=0;testament_num<2;testament_num++) { - for(int book_num=0;book_num<THIS->key.BMAX[testament_num];book_num++) { - int num_chapters = THIS->key.books[testament_num][book_num].chapmax; - HV * book_info = newHV(); - hv_store(book_info, "name", 4, newSVpv(THIS->key.books[testament_num][book_num].name, 0), 0); - hv_store(book_info, "num_chapters", 12, newSVnv(num_chapters), 0); - hv_store(book_info, "testament_num", 13, newSVnv(testament_num), 0); - hv_store(book_info, "book_num", 8, newSVnv(book_num), 0); - AV * chapter_maxes = newAV(); - for(int i=0;i<num_chapters;i++) { - av_push(chapter_maxes, newSVnv(THIS->key.books[testament_num][book_num].versemax[i])); - } - hv_store(book_info, "chapter_maxes", 13, newRV_noinc((SV *)chapter_maxes), 0); - XPUSHs(newRV_noinc((SV *)book_info)); - } - } - -void -VerseIterator::_search(char * searchStr) -PPCODE: - ListKey &searchResults = THIS->module->Search(searchStr); - - searchResults.Persist(true); - - for(int i=0;i<searchResults.Count();i++) { - SWKey * key = searchResults.GetElement(i); - AV * search_result = newAV(); - av_push(search_result, newSVpv(*key, 0)); - THIS->module->SetKey(key); - av_push(search_result, newSVpv(*THIS->module, 0)); - XPUSHs(newRV_noinc((SV *)search_result)); - } - -void -VerseIterator::_search_verses(char * searchStr) -PPCODE: - ListKey &searchResults = THIS->module->Search(searchStr); - - searchResults.Persist(true); - - for(int i=0;i<searchResults.Count();i++) { - SWKey * key = searchResults.GetElement(i); - XPUSHs(newSVpv(*key, 0)); - } - -void -VerseIterator::_parse_verse_list(char * verseList) -PPCODE: - ListKey searchResults = THIS->key.ParseVerseList(verseList, "Genesis 1:1", false); - - searchResults.Persist(true); - - for(int i=0;i<searchResults.Count();i++) { - SWKey * key = searchResults.GetElement(i); - XPUSHs(newSVpv(*key, 0)); - } - -char * -VerseIterator::_get_module_name() - -char * -VerseIterator::_get_module_desc() - -char * -VerseIterator::_get_module_type() - -int -VerseIterator::_verse_greater(char * verse1, char * verse2) - |