diff options
Diffstat (limited to 'bindings/objc/src/SwordModule.mm')
-rw-r--r-- | bindings/objc/src/SwordModule.mm | 147 |
1 files changed, 91 insertions, 56 deletions
diff --git a/bindings/objc/src/SwordModule.mm b/bindings/objc/src/SwordModule.mm index 1b1bf1c..12e2ad8 100644 --- a/bindings/objc/src/SwordModule.mm +++ b/bindings/objc/src/SwordModule.mm @@ -11,6 +11,7 @@ General Public License for more details. (http://www.gnu.org/licenses/gpl.html) */ +#import "ObjCSword_Prefix.pch" #import "SwordModule.h" #import "SwordManager.h" #import "SwordModuleTextEntry.h" @@ -19,21 +20,22 @@ #import "SwordCommentary.h" #import "SwordDictionary.h" #import "SwordBook.h" - -#import "rtfhtml.h" -#import "swtext.h" -#import "versekey.h" -#import "regex.h" +#import "SwordFilter.h" @interface SwordModule () + +@property (retain, readwrite) NSString *name; +@property (retain, readwrite) NSString *typeString; +@property (retain, readwrite) NSString *descr; +@property (retain, readwrite) NSString *lang; @property(readwrite, retain) NSMutableDictionary *configEntries; + - (void)mainInit; + @end @implementation SwordModule -#pragma mark - Property implementations - @synthesize configEntries; @synthesize type; @synthesize status; @@ -41,6 +43,10 @@ @synthesize indexLock; @synthesize swManager; @synthesize name; +@synthesize typeString; +@synthesize descr; +@synthesize lang; + + (id)moduleForSWModule:(sword::SWModule *)aModule { return [[[SwordModule alloc] initWithSWModule:aModule] autorelease]; @@ -50,8 +56,8 @@ return [[[SwordModule alloc] initWithSWModule:aModule swordManager:aManager] autorelease]; } -+ (id)moduleForType:(ModuleType)aType andName:(NSString *)aName swModule:(sword::SWModule *)swModule swordManager:(SwordManager *)aManager { - SwordModule *sm = nil; ++ (id)moduleForType:(ModuleType)aType swModule:(sword::SWModule *)swModule swordManager:(SwordManager *)aManager { + SwordModule *sm; if(aType == Bible) { sm = [[[SwordBible alloc] initWithSWModule:swModule swordManager:aManager] autorelease]; } else if(aType == Commentary) { @@ -113,15 +119,19 @@ return ret; } -#pragma mark - Initializers +#pragma mark - Initializer - (void)mainInit { category = Unset; - self.type = [SwordModule moduleTypeForModuleTypeString:[self typeString]]; - self.moduleLock = [[NSRecursiveLock alloc] init]; - self.indexLock = [[NSLock alloc] init]; + self.name = [self retrieveName]; + self.typeString = [self retrieveType]; + self.descr = [self retrieveDescr]; + self.lang = [self retrieveLang]; + + self.type = [SwordModule moduleTypeForModuleTypeString:self.typeString]; + self.moduleLock = [[[NSRecursiveLock alloc] init] autorelease]; + self.indexLock = [[[NSLock alloc] init] autorelease]; self.configEntries = [NSMutableDictionary dictionary]; - self.name = [NSString stringWithCString:swModule->Name() encoding:NSUTF8StringEncoding]; } - (id)initWithName:(NSString *)aName swordManager:(SwordManager *)aManager { @@ -162,10 +172,23 @@ [self setModuleLock:nil]; [self setIndexLock:nil]; [self setName:nil]; + [self setDescr:nil]; + [self setTypeString:nil]; + [self setLang:nil]; [super dealloc]; } +#pragma mark - Filters + +- (void)addRenderFilter:(SwordFilter *)aFilter { + swModule->AddRenderFilter([aFilter swFilter]); +} + +- (void)addStripFilter:(SwordFilter *)aFilter { + swModule->AddStripFilter([aFilter swFilter]); +} + #pragma mark - Module access semaphores - (void)lockModuleAccess { @@ -186,7 +209,15 @@ return swModule->Error(); } -- (NSString *)descr { +- (NSString *)retrieveName { + NSString *str = [NSString stringWithCString:swModule->Name() encoding:NSUTF8StringEncoding]; + if(!str) { + str = [NSString stringWithCString:swModule->Name() encoding:NSISOLatin1StringEncoding]; + } + return str; +} + +- (NSString *)retrieveDescr { NSString *str = [NSString stringWithCString:swModule->Description() encoding:NSUTF8StringEncoding]; if(!str) { str = [NSString stringWithCString:swModule->Description() encoding:NSISOLatin1StringEncoding]; @@ -194,7 +225,7 @@ return str; } -- (NSString *)lang { +- (NSString *)retrieveLang { NSString *str = [NSString stringWithCString:swModule->Lang() encoding:NSUTF8StringEncoding]; if(!str) { str = [NSString stringWithCString:swModule->Lang() encoding:NSISOLatin1StringEncoding]; @@ -202,7 +233,7 @@ return str; } -- (NSString *)typeString { +- (NSString *)retrieveType { NSString *str = [NSString stringWithCString:swModule->Type() encoding:NSUTF8StringEncoding]; if(!str) { str = [NSString stringWithCString:swModule->Type() encoding:NSISOLatin1StringEncoding]; @@ -289,7 +320,7 @@ if (d == 'u') { //we have an unicode character! @try { - NSUInteger unicodeChar = 0; + NSInteger unicodeChar = 0; NSMutableString *unicodeCharString = [[@"" mutableCopy] autorelease]; int j = 0; BOOL negative = NO; @@ -469,11 +500,11 @@ swModule->setKey([aKeyString UTF8String]); } -- (void)setKey:(SwordKey *)aKey { +- (void)setSwordKey:(SwordKey *)aKey { swModule->setKey([aKey swKey]); } -- (id)createKey { +- (SwordKey *)createKey { sword::SWKey *sk = swModule->CreateKey(); SwordKey *newKey = [SwordKey swordKeyWithSWKey:sk makeCopy:YES]; delete sk; @@ -481,17 +512,21 @@ return newKey; } -- (id)getKey { +- (SwordKey *)getKey { return [SwordKey swordKeyWithSWKey:swModule->getKey()]; } -- (id)getKeyCopy { +- (SwordKey *)getKeyCopy { return [SwordKey swordKeyWithSWKey:swModule->getKey() makeCopy:YES]; } #pragma mark - Module metadata processing - (id)attributeValueForParsedLinkData:(NSDictionary *)data { + return [self attributeValueForParsedLinkData:data withTextRenderType:TextTypeStripped]; +} + +- (id)attributeValueForParsedLinkData:(NSDictionary *)data withTextRenderType:(TextPullType)textType { id ret = nil; NSString *passage = [data objectForKey:ATTRTYPE_PASSAGE]; @@ -503,16 +538,22 @@ NSString *footnoteText = [self entryAttributeValueFootnoteOfType:attrType indexValue:[data objectForKey:ATTRTYPE_VALUE] forKey:[SwordKey swordKeyWithRef:passage]]; - ret = [self strippedTextFromString:footnoteText]; - } else if([attrType isEqualToString:@"x"]) { - NSString *refListString = [self entryAttributeValueFootnoteOfType:attrType - indexValue:[data objectForKey:ATTRTYPE_VALUE] - forKey:[SwordKey swordKeyWithRef:passage]]; - ret = [self strippedTextEntriesForRef:refListString]; - } else if([attrType isEqualToString:@"scriptRef"] || [attrType isEqualToString:@"scripRef"]) { - NSString *key = [[[data objectForKey:ATTRTYPE_VALUE] stringByReplacingOccurrencesOfString:@"+" - withString:@" "] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - ret = [self strippedTextEntriesForRef:key]; + ret = footnoteText; + } else if([attrType isEqualToString:@"x"] || [attrType isEqualToString:@"scriptRef"] || [attrType isEqualToString:@"scripRef"]) { + NSString *key = @""; + if([attrType isEqualToString:@"x"]) { + key = [self entryAttributeValueFootnoteOfType:attrType + indexValue:[data objectForKey:ATTRTYPE_VALUE] + forKey:[SwordKey swordKeyWithRef:passage]]; + } else { + key = [[[data objectForKey:ATTRTYPE_VALUE] stringByReplacingOccurrencesOfString:@"+" + withString:@" "] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + } + if(textType == TextTypeRendered) { + ret = [self renderedTextEntriesForRef:key]; + } else { + ret = [self strippedTextEntriesForRef:key]; + } } return ret; @@ -527,8 +568,7 @@ } - (NSString *)entryAttributeValuePreverse { - NSString *ret = @""; - ret = [NSString stringWithUTF8String:swModule->getEntryAttributes()["Heading"]["Preverse"]["0"].c_str()]; + NSString *ret = [NSString stringWithUTF8String:swModule->getEntryAttributes()["Heading"]["Preverse"]["0"].c_str()]; return ret; } @@ -560,7 +600,7 @@ if (word->second.find("Text") == word->second.end()) continue; // no text? let's skip } - NSMutableString *stringValStr = [NSMutableString stringWithUTF8String:strongVal->second]; + NSMutableString *stringValStr = [NSMutableString stringWithUTF8String:(const char *)strongVal->second]; if(stringValStr) { [stringValStr replaceOccurrencesOfString:@"|x-Strongs:" withString:@" " options:0 range:NSMakeRange(0, [stringValStr length])]; [array addObject:stringValStr]; @@ -573,7 +613,7 @@ - (NSString *)entryAttributeValuePreverseForKey:(SwordKey *)aKey { [moduleLock lock]; - [self setKey:aKey]; + [self setSwordKey:aKey]; swModule->RenderText(); // force processing of key NSString *value = [self entryAttributeValuePreverse]; [moduleLock unlock]; @@ -582,7 +622,7 @@ - (NSString *)entryAttributeValueFootnoteOfType:(NSString *)fnType indexValue:(NSString *)index forKey:(SwordKey *)aKey { [moduleLock lock]; - [self setKey:aKey]; + [self setSwordKey:aKey]; swModule->RenderText(); // force processing of key NSString *value = [self entryAttributeValueFootnoteOfType:fnType indexValue:index]; [moduleLock unlock]; @@ -633,27 +673,11 @@ } - (NSArray *)strippedTextEntriesForRef:(NSString *)reference { - NSArray *ret = nil; - - SwordModuleTextEntry *entry = [self textEntryForKey:[SwordKey swordKeyWithRef:reference] - textType:TextTypeStripped]; - if(entry) { - ret = [NSArray arrayWithObject:entry]; - } - - return ret; + return [self textEntriesForReference:reference textType:TextTypeStripped]; } - (NSArray *)renderedTextEntriesForRef:(NSString *)reference { - NSArray *ret = nil; - - SwordModuleTextEntry *entry = [self textEntryForKey:[SwordKey swordKeyWithRef:reference] - textType:TextTypeRendered]; - if(entry) { - ret = [NSArray arrayWithObject:entry]; - } - - return ret; + return [self textEntriesForReference:reference textType:TextTypeRendered]; } - (SwordModuleTextEntry *)textEntryForKey:(SwordKey *)aKey textType:(TextPullType)aType { @@ -661,7 +685,7 @@ if(aKey) { [moduleLock lock]; - [self setKey:aKey]; + [self setSwordKey:aKey]; if(![self error]) { NSString *txt = @""; if(aType == TextTypeRendered) { @@ -686,6 +710,17 @@ return [self textEntryForKey:[SwordKey swordKeyWithRef:aKeyString] textType:aType]; } +- (NSArray *)textEntriesForReference:(NSString *)aReference textType:(TextPullType)textType { + NSArray *ret = nil; + + SwordModuleTextEntry *entry = [self textEntryForKey:[SwordKey swordKeyWithRef:aReference] + textType:textType]; + if(entry) { + ret = [NSArray arrayWithObject:entry]; + } + + return ret; +} - (void)writeEntry:(SwordModuleTextEntry *)anEntry {} |