diff options
Diffstat (limited to 'bindings/objc/src/SwordBible.mm')
-rw-r--r-- | bindings/objc/src/SwordBible.mm | 167 |
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 |