summaryrefslogtreecommitdiff
path: root/bindings/objc/src/SwordModule.mm
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/objc/src/SwordModule.mm')
-rw-r--r--bindings/objc/src/SwordModule.mm147
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 {}