18
#include <localemgr.h>
26
VerseIterator(char * module_name);
30
const char * get_module_name() { return module->Name(); }
33
const char * get_verse() { module->SetKey(key); return (const char*)*module; }
34
const char * get_key() { return key; }
37
int next(int how_far);
38
int prev(int how_far);
41
int go_to_verse(char * verse);
43
// Book / Chapter / Verse traversal
44
const char * get_book() { return key.books[key.Testament() - 1][key.Book() - 1].name; }
45
int get_chapter_num() { return key.Chapter(); }
46
int get_verse_num() { return key.Verse(); }
48
void set_chapter_num(int chapter_num) { key.Chapter(chapter_num); }
49
void set_verse_num(int verse_num) { key.Verse(verse_num); }
51
// Stuff that should go into some sort of Module class
52
char * _get_module_name() { return module->Name(); }
53
char * _get_module_desc() { return module->Description(); }
54
char * _get_module_type() { return module->Type(); }
55
int _verse_greater(char * verse1, char * verse2);
58
VerseIterator::VerseIterator(char * module_name) {
59
module = manager.Modules[module_name];
61
key.setLocale(LocaleMgr::systemLocaleMgr.getDefaultLocaleName());
63
key = key.LowerBound();
66
VerseIterator::~VerseIterator() {
69
int VerseIterator::next(int how_far) {
70
if(key == key.UpperBound()) {
79
int VerseIterator::prev(int how_far) {
80
if(key == key.LowerBound()) {
89
int VerseIterator::go_to_verse(char * verse) {
90
int retval = module->SetKey(verse);
95
int VerseIterator::_verse_greater(char * verse1, char * verse2) {
96
if(module->SetKey(verse1)) {
99
SWKey key1 = module->Key();
100
if(module->SetKey(verse2)) {
103
SWKey key2 = module->Key();
107
MODULE = Sword PACKAGE = Sword
110
get_modules(char * textType = "Biblical Texts")
112
ModMap::iterator modIterator;
113
for (modIterator = manager.Modules.begin(); modIterator != manager.Modules.end(); modIterator++) {
114
SWModule *module = (*modIterator).second;
115
if(!strcmp(module->Type(),textType)) {
116
string s = (*modIterator).first;
117
XPUSHs(sv_2mortal(newSVpv(s.c_str(), s.length())));
124
LocaleMgr lm = LocaleMgr::systemLocaleMgr;
125
list<string> loclist = lm.getAvailableLocales();
126
list<string>::iterator li = loclist.begin();
127
for (;li != loclist.end(); li++) {
128
XPUSHs(sv_2mortal(newSVpv(li->c_str(), li->length())));
132
set_locale(char * locale)
134
LocaleMgr::systemLocaleMgr.setDefaultLocaleName(locale);
137
MODULE = Sword PACKAGE = Sword::VerseIterator
140
VerseIterator::new(char * module_name)
143
VerseIterator::DESTROY()
146
VerseIterator::get_module_name()
149
VerseIterator::get_verse()
152
VerseIterator::get_key()
156
VerseIterator::next(int how_far = 1)
159
VerseIterator::prev(int how_far = 1)
163
VerseIterator::go_to_verse(char * verse)
167
VerseIterator::get_book()
170
VerseIterator::get_chapter_num()
173
VerseIterator::get_verse_num()
176
VerseIterator::set_chapter_num(int chapter_num)
179
VerseIterator::set_verse_num(int verse_num)
183
VerseIterator::_get_books()
186
for(int testament_num=0;testament_num<2;testament_num++) {
187
for(int book_num=0;book_num<THIS->key.BMAX[testament_num];book_num++) {
188
int num_chapters = THIS->key.books[testament_num][book_num].chapmax;
189
HV * book_info = newHV();
190
hv_store(book_info, "name", 4, newSVpv(THIS->key.books[testament_num][book_num].name, 0), 0);
191
hv_store(book_info, "num_chapters", 12, newSVnv(num_chapters), 0);
192
hv_store(book_info, "testament_num", 13, newSVnv(testament_num), 0);
193
hv_store(book_info, "book_num", 8, newSVnv(book_num), 0);
194
AV * chapter_maxes = newAV();
195
for(int i=0;i<num_chapters;i++) {
196
av_push(chapter_maxes, newSVnv(THIS->key.books[testament_num][book_num].versemax[i]));
198
hv_store(book_info, "chapter_maxes", 13, newRV_noinc((SV *)chapter_maxes), 0);
199
XPUSHs(newRV_noinc((SV *)book_info));
204
VerseIterator::_search(char * searchStr)
206
ListKey &searchResults = THIS->module->Search(searchStr);
208
searchResults.Persist(true);
210
for(int i=0;i<searchResults.Count();i++) {
211
SWKey * key = searchResults.GetElement(i);
212
AV * search_result = newAV();
213
av_push(search_result, newSVpv(*key, 0));
214
THIS->module->SetKey(key);
215
av_push(search_result, newSVpv(*THIS->module, 0));
216
XPUSHs(newRV_noinc((SV *)search_result));
220
VerseIterator::_search_verses(char * searchStr)
222
ListKey &searchResults = THIS->module->Search(searchStr);
224
searchResults.Persist(true);
226
for(int i=0;i<searchResults.Count();i++) {
227
SWKey * key = searchResults.GetElement(i);
228
XPUSHs(newSVpv(*key, 0));
232
VerseIterator::_parse_verse_list(char * verseList)
234
ListKey searchResults = THIS->key.ParseVerseList(verseList, "Genesis 1:1", false);
236
searchResults.Persist(true);
238
for(int i=0;i<searchResults.Count();i++) {
239
SWKey * key = searchResults.GetElement(i);
240
XPUSHs(newSVpv(*key, 0));
244
VerseIterator::_get_module_name()
247
VerseIterator::_get_module_desc()
250
VerseIterator::_get_module_type()
253
VerseIterator::_verse_greater(char * verse1, char * verse2)