summaryrefslogtreecommitdiff
path: root/bindings/objc/src/SwordBible.mm
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/objc/src/SwordBible.mm')
-rw-r--r--bindings/objc/src/SwordBible.mm167
1 files changed, 74 insertions, 93 deletions
diff --git a/bindings/objc/src/SwordBible.mm b/bindings/objc/src/SwordBible.mm
index 03e378e..7b78af5 100644
--- a/bindings/objc/src/SwordBible.mm
+++ b/bindings/objc/src/SwordBible.mm
@@ -19,7 +19,7 @@ using sword::AttributeValue;
@interface SwordBible ()
-- (void)buildBookList;
+- (NSDictionary *)buildBookList;
- (BOOL)containsBookNumber:(int)aBookNum;
- (NSArray *)textEntriesForReference:(NSString *)aReference context:(int)context textType:(TextPullType)textType;
@@ -78,14 +78,14 @@ NSLock *bibleLock = nil;
//if abbr contains : or . then we are a verse so return a chapter
if([abbr rangeOfString:@":"].location != NSNotFound || [abbr rangeOfString:@"."].location != NSNotFound) {
- return [firstBits objectAtIndex:0];
+ return firstBits[0];
}
//otherwise return a book
firstBits = [first componentsSeparatedByString:@" "];
if([firstBits count] > 0) {
- return [firstBits objectAtIndex:0];
+ return firstBits[0];
}
return abbr;
@@ -96,22 +96,13 @@ NSLock *bibleLock = nil;
that is: book number + testament * 100
*/
+ (int)bookIndexForSWKey:(sword::VerseKey *)key {
- return key->Book() + key->Testament() * 100;
+ return key->getBookMax() + key->getTestamentMax() * 100;
}
#pragma mark - Initializers
-- (id)initWithName:(NSString *)aName swordManager:(SwordManager *)aManager {
- self = [super initWithName:aName swordManager:aManager];
- if(self) {
- [self setBooks:nil];
- }
-
- return self;
-}
-
- (id)initWithSWModule:(sword::SWModule *)aModule swordManager:(SwordManager *)aManager {
- self = [super initWithSWModule:aModule swordManager:aManager];
+ self = [super initWithSWModule:aModule];
if(self) {
[self setBooks:nil];
}
@@ -119,20 +110,11 @@ NSLock *bibleLock = nil;
return self;
}
-- (void)finalize {
- [super finalize];
-}
-- (void)dealloc {
- [books release];
- [super dealloc];
-}
#pragma mark - Bible information
-- (void)buildBookList {
- [moduleLock lock];
-
+- (NSDictionary *)buildBookList {
sword::VersificationMgr *vmgr = sword::VersificationMgr::getSystemVersificationMgr();
const sword::VersificationMgr::System *system = vmgr->getVersificationSystem([[self versification] UTF8String]);
@@ -141,15 +123,13 @@ NSLock *bibleLock = nil;
for(int i = 0;i < bookCount;i++) {
sword::VersificationMgr::Book *book = (sword::VersificationMgr::Book *)system->getBook(i);
- SwordBibleBook *bb = [[[SwordBibleBook alloc] initWithBook:book] autorelease];
+ SwordBibleBook *bb = [[SwordBibleBook alloc] initWithBook:book];
[bb setNumber:i+1];
NSString *bookName = [bb name];
- [buf setObject:bb forKey:bookName];
+ buf[bookName] = bb;
}
- self.books = buf;
-
- [moduleLock unlock];
+ return [NSDictionary dictionaryWithDictionary:buf];
}
- (BOOL)containsBookNumber:(int)aBookNum {
@@ -161,17 +141,15 @@ NSLock *bibleLock = nil;
return NO;
}
-- (NSMutableDictionary *)books {
- if(books == nil) {
- [self buildBookList];
+- (NSDictionary *)books {
+ if(_books == nil) {
+ _books = [self buildBookList];
}
- return books;
+ return _books;
}
-- (void)setBooks:(NSMutableDictionary *)aBooks {
- [aBooks retain];
- [books release];
- books = aBooks;
+- (void)setBooks:(NSDictionary *)aBooks {
+ _books = aBooks;
}
- (NSArray *)bookList {
@@ -181,15 +159,15 @@ NSLock *bibleLock = nil;
}
- (BOOL)hasReference:(NSString *)ref {
- [moduleLock lock];
+ [self.moduleLock lock];
- sword::VerseKey *key = (sword::VerseKey *)(swModule->CreateKey());
+ sword::VerseKey *key = (sword::VerseKey *)(swModule->createKey());
(*key) = [ref UTF8String];
NSString *bookName = [NSString stringWithUTF8String:key->getBookName()];
- int chapter = key->Chapter();
- int verse = key->Verse();
+ int chapter = key->getChapterMax();
+ int verse = key->getVerseMax();
- SwordBibleBook *bb = [[self books] objectForKey:bookName];
+ SwordBibleBook *bb = [self books][bookName];
if(bb) {
if(chapter > 0 && chapter < [bb numberOfChapters]) {
if(verse > 0 && verse < [bb numberOfVersesForChapter:chapter]) {
@@ -198,7 +176,7 @@ NSLock *bibleLock = nil;
}
}
- [moduleLock unlock];
+ [self.moduleLock unlock];
return NO;
}
@@ -208,41 +186,29 @@ NSLock *bibleLock = nil;
if(aReference && [aReference length] > 0) {
sword::VerseKey vk;
- sword::ListKey listKey = vk.ParseVerseList([aReference UTF8String], "Gen1", true);
+ sword::ListKey listKey = vk.parseVerseList([aReference UTF8String], "Gen1", true);
// unfortunately there is no other way then loop though all verses to know how many
- for(listKey = sword::TOP; !listKey.Error(); listKey++) ret++;
+ for(listKey = sword::TOP; !listKey.popError(); listKey++) ret++;
}
return ret;
}
- (int)chaptersForBookName:(NSString *)bookName {
- [moduleLock lock];
-
- int maxChapters;
- sword::VerseKey *key = (sword::VerseKey *)swModule->CreateKey();
- (*key) = [bookName UTF8String];
- maxChapters = key->getChapterMax();
- delete key;
-
- [moduleLock unlock];
-
- return maxChapters;
+ SwordBibleBook *book = [self bookForName:bookName];
+ if(book != nil) {
+ return [book numberOfChapters];
+ }
+ return -1;
}
-
- (int)versesForChapter:(int)chapter bookName:(NSString *)bookName {
int ret = -1;
- [moduleLock lock];
-
- SwordBibleBook *bb = [[self books] objectForKey:bookName];
+ SwordBibleBook *bb = [self books][bookName];
if(bb) {
ret = [bb numberOfVersesForChapter:chapter];
}
-
- [moduleLock unlock];
-
return ret;
}
@@ -261,9 +227,18 @@ NSLock *bibleLock = nil;
return ret;
}
-- (SwordBibleBook *)bookForLocalizedName:(NSString *)bookName {
+- (SwordBibleBook *)bookForName:(NSString *)bookName {
for(SwordBibleBook *book in [[self books] allValues]) {
- if([[book localizedName] isEqualToString:bookName]) {
+ if([[book localizedName] isEqualToString:bookName] || [[book name] isEqualToString:bookName]) {
+ return book;
+ }
+ }
+ return nil;
+}
+
+- (SwordBibleBook *)bookWithNamePrefix:(NSString *)aPrefix {
+ for(SwordBibleBook *book in [[self books] allValues]) {
+ if([[book localizedName] hasPrefix:aPrefix] || [[book name] hasPrefix:aPrefix]) {
return book;
}
}
@@ -273,62 +248,69 @@ NSLock *bibleLock = nil;
- (NSString *)moduleIntroduction {
NSString *ret;
+ [self.moduleLock lock];
+
// save key
- SwordVerseKey *save = [(SwordVerseKey *)[self getKeyCopy] autorelease];
+ SwordVerseKey *save = (SwordVerseKey *)[self getKeyCopy];
SwordVerseKey *key = [SwordVerseKey verseKeyWithVersification:[self versification]];
[key setHeadings:YES];
- [key setPosition:0];
+ [key setTestament:0];
[self setSwordKey:key];
ret = [self renderedText];
// restore old key
[self setSwordKey:save];
+ [self.moduleLock unlock];
+
return ret;
}
- (NSString *)bookIntroductionFor:(SwordBibleBook *)aBook {
NSString *ret;
+ [self.moduleLock lock];
+
// save key
- SwordVerseKey *save = [(SwordVerseKey *)[self getKeyCopy] autorelease];
+ SwordVerseKey *save = (SwordVerseKey *)[self getKeyCopy];
SwordVerseKey *key = [SwordVerseKey verseKeyWithVersification:[self versification]];
[key setHeadings:YES];
- [key setAutoNormalize:NO];
- [key setTestament:[aBook testament]];
- [key setBook:[aBook numberInTestament]];
- [key setChapter:0];
- [key setVerse:0];
+ [key setTestament:(char) [aBook testament]];
+ [key setBook:(char) [aBook numberInTestament]];
[self setSwordKey:key];
ret = [self renderedText];
// restore old key
[self setSwordKey:save];
+ [self.moduleLock unlock];
+
return ret;
}
-- (NSString *)chapterIntroductionFor:(SwordBibleBook *)aBook chapter:(int)chapter {
+- (NSString *)chapterIntroductionIn:(SwordBibleBook *)aBook forChapter:(int)chapter {
NSString *ret;
-
+
+ [self.moduleLock lock];
+
// save key
- SwordVerseKey *save = [(SwordVerseKey *)[self getKeyCopy] autorelease];
+ SwordVerseKey *save = (SwordVerseKey *)[self getKeyCopy];
SwordVerseKey *key = [SwordVerseKey verseKeyWithVersification:[self versification]];
[key setHeadings:YES];
- [key setAutoNormalize:NO];
- [key setTestament:[aBook testament]];
- [key setBook:[aBook numberInTestament]];
+ [key setTestament:(char) [aBook testament]];
+ [key setBook:(char) [aBook numberInTestament]];
[key setChapter:chapter];
- [key setVerse:0];
[self setSwordKey:key];
ret = [self renderedText];
// restore old key
[self setSwordKey:save];
+ [self.moduleLock unlock];
+
return ret;
}
@@ -336,7 +318,7 @@ NSLock *bibleLock = nil;
SwordBibleTextEntry *ret = nil;
if(aKey) {
- [moduleLock lock];
+ [self.moduleLock lock];
[self setSwordKey:aKey];
if(![self error]) {
NSString *txt;
@@ -352,32 +334,32 @@ NSLock *bibleLock = nil;
ALog(@"nil key");
}
- if([swManager globalOption:SW_OPTION_HEADINGS] && [self hasFeature:SWMOD_FEATURE_HEADINGS]) {
+ if([self.swManager globalOption:SW_OPTION_HEADINGS] && [self hasFeature:SWMOD_FEATURE_HEADINGS]) {
NSString *preverseHeading = [self entryAttributeValuePreverse];
if(preverseHeading && [preverseHeading length] > 0) {
[ret setPreVerseHeading:preverseHeading];
}
}
}
- [moduleLock unlock];
+ [self.moduleLock unlock];
}
return ret;
}
- (NSString *)versification {
- NSString *versification = [configEntries objectForKey:SWMOD_CONFENTRY_VERSIFICATION];
+ NSString *versification = self.configEntries[SWMOD_CONFENTRY_VERSIFICATION];
if(versification == nil) {
versification = [self configFileEntryForConfigKey:SWMOD_CONFENTRY_VERSIFICATION];
if(versification != nil) {
- [configEntries setObject:versification forKey:SWMOD_CONFENTRY_VERSIFICATION];
+ self.configEntries[SWMOD_CONFENTRY_VERSIFICATION] = versification;
}
}
// if still nil, use KJV versification
if(versification == nil) {
versification = @"KJV";
- [configEntries setObject:versification forKey:SWMOD_CONFENTRY_VERSIFICATION];
+ self.configEntries[SWMOD_CONFENTRY_VERSIFICATION] = versification;
}
return versification;
@@ -386,7 +368,7 @@ NSLock *bibleLock = nil;
#pragma mark - SwordModuleAccess
- (SwordKey *)createKey {
- sword::VerseKey *vk = (sword::VerseKey *)swModule->CreateKey();
+ sword::VerseKey *vk = (sword::VerseKey *)swModule->createKey();
SwordVerseKey *newKey = [SwordVerseKey verseKeyWithSWVerseKey:vk makeCopy:YES];
delete vk;
@@ -403,9 +385,9 @@ NSLock *bibleLock = nil;
- (long)entryCount {
swModule->setPosition(sword::TOP);
- long verseLowIndex = swModule->Index();
+ long verseLowIndex = swModule->getIndex();
swModule->setPosition(sword::BOTTOM);
- long verseHighIndex = swModule->Index();
+ long verseHighIndex = swModule->getIndex();
return verseHighIndex - verseLowIndex;
}
@@ -435,7 +417,6 @@ NSLock *bibleLock = nil;
SwordListKey *lk = [SwordListKey listKeyWithRef:aReference v11n:[self versification]];
[lk setPosition:SWPOS_TOP];
- [lk setPersist:NO];
SwordVerseKey *vk = [SwordVerseKey verseKeyWithRef:[lk keyText] v11n:[self versification]];
while(![lk error]) {
// set current key to vk
@@ -466,16 +447,16 @@ NSLock *bibleLock = nil;
- (void)writeEntry:(SwordModuleTextEntry *)anEntry {
const char *data = [[anEntry text] UTF8String];
- int dLen = strlen(data);
+ size_t dLen = strlen(data);
- [moduleLock lock];
+ [self.moduleLock lock];
[self setKeyString:[anEntry key]];
if(![self error]) {
swModule->setEntry(data, dLen); // save text to module at current position
} else {
ALog(@"error at positioning module!");
}
- [moduleLock unlock];
+ [self.moduleLock unlock];
}
@end