// // ConjugateRegularVerb.m // Espagram // // Created by Abel Fokkinga on 8/29/12. // Copyright (c) 2012 Abel Fokkinga. All rights reserved. // #import "SpanishConjugator.h" @interface SpanishConjugator() @property (nonatomic, strong) NSArray *simplePresentEtoIEstemChangersArray, *simplePresentOtoUEstemChangersArray, *simplePresentEtoIstemChangersArray; @end @implementation SpanishConjugator @synthesize simplePresentEtoIEstemChangersArray = _simplePresentEtoIEstemChangersArray; @synthesize simplePresentOtoUEstemChangersArray = _simplePresentOtoUEstemChangersArray; @synthesize simplePresentEtoIstemChangersArray = _simplePresentEtoIstemChangersArray; - (NSArray *) simplePresentEtoIEstemChangersArray{ if (_simplePresentEtoIEstemChangersArray == nil) _simplePresentEtoIEstemChangersArray = [[NSArray alloc] initWithObjects:@"acertar", @"encender",@"advertir",@"entender",@"cerrar",@"fregar",@"comenzar",@"hervir",@"confesar",@"mentir",@"consentir",@"negar",@"convertir",@"pensar",@"defender",@"perder",@"empezar",@"preferir",@"querer",@"merendar",nil]; return _simplePresentEtoIEstemChangersArray; } - (NSArray *) simplePresentOtoUEstemChangersArray{ if (_simplePresentOtoUEstemChangersArray == nil) _simplePresentOtoUEstemChangersArray = [[NSArray alloc] initWithObjects:@"almorzar",@"morir",@"aprobar",@"mostrar",@"colgar",@"mover",@"contar",@"probar",@"costar",@"recordar",@"devolver",@"resolver",@"volver",@"rogar",@"dormir",@"sonar",@"encontrar",@"soñar",@"envolver",@"tostar",@"morder",@"volar",@"poder",nil]; return _simplePresentOtoUEstemChangersArray; } - (NSArray *) simplePresentEtoIstemChangersArray{ if (_simplePresentEtoIstemChangersArray == nil) _simplePresentEtoIstemChangersArray = [[NSArray alloc] initWithObjects:@"impedir",@"colegir",@"competir",@"medir",@"conseguir",@"pedir",@"corregir",@"perseguir",@"reír",@"despedir",@"repetir", @"seguir",@"freír",@"servir",@"gemir",@"sonreír",nil]; // not including elegir here as it also has an g to j change in first person singular return _simplePresentEtoIstemChangersArray; } - (NSString *) getExit:(NSString *) verb { NSLog(@"getExit start"); return [verb substringFromIndex:[verb length] - 2]; } - (NSString *) getStem:(NSString *) verb { NSLog(@"getStem start"); if ( [[self getExit:verb] isEqualToString:@"ír"] ) return [[verb substringToIndex:[verb length] -2] stringByAppendingString:@"i"]; NSLog(@"getStem end"); return [verb substringToIndex:[verb length] -2]; } - (NSString *) getSimplePresentStemVerb:(NSString *) verb inPerson:(NSString *) person { NSString * verbStem = [self getStem:verb]; NSLog(@"getSimplePresentStemVerb start.irregular"); // Bit irregular if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"] ) { if ( [verb rangeOfString:@"coger"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"cog"] withString:@"coj"]; if ( [verb rangeOfString:@"poner"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"pon"] withString:@"pong"]; if ( [verb isEqualToString:@"oír"] ) return @"oig"; // conducir, conocer etc. if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"cer"] || [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"cir"] ) return [[verbStem substringToIndex:[verbStem length] - 1] stringByAppendingString:@"zc"]; if ( [verb isEqualToString:@"oír"] ) return @"oí"; // appearance of g in the first person if ( [verb isEqualToString:@"caer"] ) return @"caig"; if ( [verb isEqualToString:@"traer"] ) return @"traig"; if ( [verb rangeOfString:@"decir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"dec"] withString:@"dig"]; if ( [verb rangeOfString:@"hacer"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"hac"] withString:@"hag"]; if ( [verb rangeOfString:@"poner"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"pon"] withString:@"pong"]; if ( [verb isEqualToString:@"salir"] ) return @"salg"; if ( [verb rangeOfString:@"tener"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verb rangeOfString:@"ten"] withString:@"teng"]; if ( [verb isEqualToString:@"valer"] ) return @"valg"; if ( [verb rangeOfString:@"venir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"ven"] withString:@"veng"]; // other if ( [verb isEqualToString:@"ver"] ) return @"ve"; // g -> j if ( [verb isEqualToString:@"elegir"] ) return @"elij"; // g -> j if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"gir"] ) return [[verb substringToIndex:[verb length] - 3] stringByAppendingString:@"j"]; // gu -> g if ( [[verb substringFromIndex:[verb length] - 4] isEqualToString:@"guir"] ) return [[verb substringToIndex:[verb length] - 4] stringByAppendingString:@"g"]; } if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"] || [person isEqualToString:@"SECOND_PERSON_SINGULAR"] || [person isEqualToString:@"THIRD_PERSON_SINGULAR"] || [person isEqualToString:@"THIRD_PERSON_PLURAL"] ) { if ( [verb rangeOfString:@"decir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"dec"] withString:@"dic"]; if ( [verb isEqualToString:@"oír"] ) return @"oy"; if ( [verb rangeOfString:@"tener"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verb rangeOfString:@"ten"] withString:@"tien"]; // Verbs adding an accent if ( [verb isEqualToString:@"continuar"] ) return @"continú"; if ( [verb isEqualToString:@"enviar"] ) return @"enví"; if ( [verb isEqualToString:@"actuar"] ) return @"actú"; if ( [verb isEqualToString:@"graduar"] ) return @"gradú"; if ( [verb isEqualToString:@"confiar"] ) return @"confí"; if ( [verb isEqualToString:@"criar"] ) return @"crí"; if ( [verb isEqualToString:@"esquiar"] ) return @"esquí"; if ( [verb isEqualToString:@"vaciar"] ) return @"vací"; } if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"]) { if ( [verb isEqualToString:@"oír"] ) return @"oí"; } if ( [verb isEqualToString:@"elegir"] ) return @"elig"; // Regular NSLog(@"getSimplePresentStemVerb start.regular"); if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"] || [person isEqualToString:@"SECOND_PERSON_SINGULAR"] || [person isEqualToString:@"THIRD_PERSON_SINGULAR"] || [person isEqualToString:@"THIRD_PERSON_PLURAL"] ) { if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to ie return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"ie"]; } if ( [[self simplePresentOtoUEstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to ie return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o"] withString:@"ue"]; } if ( [[self simplePresentEtoIstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to ie return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"i"]; } // u -> ue if ( [verb isEqualToString:@"jugar"]) return @"jueg"; // huir, construir if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"uir"] && ![[verb substringFromIndex:[verb length] - 3] isEqualToString:@"guir"]) return [[verb substringToIndex:[verb length] - 3] stringByAppendingString:@"uy"]; } NSLog(@"getSimplePresentStemVerb end"); return verbStem; } - (NSString *) conjugateSimplePresentVerb:(NSString *) verb inPerson:(NSString *) person { NSLog(@"conjugateRegularSimplePresentVerb Start"); NSString * verbStem = [self getSimplePresentStemVerb:verb inPerson:person]; NSString * verbExit = [self getExit:verb]; // very irregular if ( [verb isEqualToString:@"haber"] ) return @"hay"; // other types of first person changes if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { if ( [verb isEqualToString:@"caber"] ) return @"quepo"; if ( [verb isEqualToString:@"dar"] ) return @"doy"; if ( [verb isEqualToString:@"saber"] ) return @"sé"; } // regular if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { if ( [verb isEqualToString:@"estar"] ) return @"estoy"; if ( [verb isEqualToString:@"ser"] ) return @"soy"; if ( [verb isEqualToString:@"ir"] ) return @"voy"; if ( [verb isEqualToString:@"oler"] ) return @"huelo"; return [verbStem stringByAppendingString:@"o"]; } if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"]) { if ( [verb isEqualToString:@"estar"] ) return @"estás"; if ( [verb isEqualToString:@"ser"] ) return @"eres"; if ( [verb isEqualToString:@"ir"] ) return @"vas"; if ( [verb isEqualToString:@"oler"] ) return @"hueles"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"as"]; else return [verbStem stringByAppendingString:@"es"]; } if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { if ( [verb isEqualToString:@"estar"] ) return @"está"; if ( [verb isEqualToString:@"ser"] ) return @"es"; if ( [verb isEqualToString:@"ir"] ) return @"va"; if ( [verb isEqualToString:@"oler"] ) return @"huele"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"a"]; else return [verbStem stringByAppendingString:@"e"]; } if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { if ( [verb isEqualToString:@"estar"] ) return @"estamos"; if ( [verb isEqualToString:@"ser"] ) return @"somos"; if ( [verb isEqualToString:@"ir"] ) return @"vamos"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"amos"]; if ( [@"er" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"emos"]; if ( [@"ir" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"imos"]; } if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"]) { if ( [verb isEqualToString:@"estar"] ) return @"estáis"; if ( [verb isEqualToString:@"ser"] ) return @"sois"; if ( [verb isEqualToString:@"ir"] ) return @"vais"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"áis"]; if ( [@"er" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"éis"]; if ( [@"ir" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"ís"]; } if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { if ( [verb isEqualToString:@"estar"] ) return @"están"; if ( [verb isEqualToString:@"ser"] ) return @"son"; if ( [verb isEqualToString:@"ir"] ) return @"van"; if ( [verb isEqualToString:@"oler"] ) return @"huelen"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"an"]; else return [verbStem stringByAppendingString:@"en"]; } return verb; } - (NSString *) conjugateSimplePastVerb:(NSString *) verb inPerson:(NSString *) person { NSString * verbStem = [self getStem:verb]; NSString * verbExit = [self getExit:verb]; if ( [verb isEqualToString:@"andar"]) verbStem = @"anduv"; if ( [verb isEqualToString:@"conducir"]) verbStem = @"conduj"; if ( [verb isEqualToString:@"decir"]) verbStem = @"dij"; if ( [verb isEqualToString:@"estar"]) verbStem = @"estuv"; if ( [verb isEqualToString:@"haber"]) verbStem = @"hub"; if ( [verb isEqualToString:@"hacer"]) { if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) verbStem = @"hiz"; else verbStem = @"hic"; } if ( [verb isEqualToString:@"poder"]) verbStem = @"pud"; if ( [verb isEqualToString:@"poner"]) verbStem = @"pus"; if ( [verb isEqualToString:@"querer"]) verbStem = @"quis"; if ( [verb isEqualToString:@"saber"]) verbStem = @"sup"; if ( [verb isEqualToString:@"tener"]) verbStem = @"tuv"; if ( [verb isEqualToString:@"traducir"]) verbStem = @"traduj"; if ( [verb isEqualToString:@"traer"]) verbStem = @"traj"; if ( [verb isEqualToString:@"venir"]) verbStem = @"vin"; if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { // Irregular if ( [verb isEqualToString:@"dar"]) return @"di"; if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) return @"fui"; if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"car"] ) return [[verb substringFromIndex:[verb length] - 3] stringByAppendingString:@"qué"]; if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"gar"] ) return [[verb substringFromIndex:[verb length] - 3] stringByAppendingString:@"gué"]; if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"zar"] ) return [[verb substringFromIndex:[verb length] - 3] stringByAppendingString:@"cé"]; if ( [verbStem isEqualToString:[self getStem:verb]]) { // Regular if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"é"]; else return [verbStem stringByAppendingString:@"í"]; } else { // Irregular if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"e"]; else return [verbStem stringByAppendingString:@"i"]; } } if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"]) { // Irregular if ( [verb isEqualToString:@"dar"]) return @"diste"; if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) return @"fuiste"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"aste"]; else [verbStem stringByAppendingString:@"iste"]; } if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { // Irregular if ( [verb isEqualToString:@"dar"]) return @"dio"; if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) return @"fue"; if ( [[verbStem substringFromIndex:[verb length] - 1] isEqualToString:@"e"] || [[verbStem substringFromIndex:[verb length] - 1] isEqualToString:@"i"]) // If the stem of an -er or -ir ends in a vowel, the -i of the 3rd person changes to y return [verbStem stringByAppendingString:@"yó"]; if ( ![@"ar" isEqualToString:verbExit] ) { // Irregular, stem changed if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"o"]; else return [verbStem stringByAppendingString:@"io"]; } if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to i verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"i"]; } if ( [[self simplePresentOtoUEstemChangersArray] containsObject:verb] ) { // Verb changes stem from o to u verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o"] withString:@"u"]; } if ( [[self simplePresentEtoIstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to i verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"i"]; } if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"ó"]; else if ([[verbStem substringFromIndex:[verb length] - 1] isEqualToString:@"i"]) return [verbStem stringByAppendingString:@"o"]; else return [verbStem stringByAppendingString:@"ió"]; } if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { // Irregular if ( [verb isEqualToString:@"dar"]) return @"dimos"; if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) return @"fuimos"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"amos"]; else return [verbStem stringByAppendingString:@"imos"]; } if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"]) { // Irregular if ( [verb isEqualToString:@"dar"]) return @"disteis"; if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) return @"fuisteis"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"asteis"]; else return [verbStem stringByAppendingString:@"isteis"]; } if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { // Irregular if ( [verb isEqualToString:@"dar"]) return @"dieron"; if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) return @"fueron"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"aron"]; else if ([[verbStem substringFromIndex:[verb length] - 1] isEqualToString:@"j"]) return [verbStem stringByAppendingString:@"eron"]; else return [verbStem stringByAppendingString:@"ieron"]; } return verb; } - (NSString *) conjugateImperfectVerb:(NSString *) verb inPerson:(NSString *) person { NSString * verbStem = [self getStem:verb]; NSString * verbExit = [self getExit:verb]; // regular if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { if ( [verb isEqualToString:@"ser"] ) return @"era"; if ( [verb isEqualToString:@"ir"] ) return @"iba"; if ( [verb isEqualToString:@"ver"] ) return @"veía"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"aba"]; else return [verbStem stringByAppendingString:@"ía"]; } if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"]) { if ( [verb isEqualToString:@"ser"] ) return @"eras"; if ( [verb isEqualToString:@"ir"] ) return @"ibas"; if ( [verb isEqualToString:@"ver"] ) return @"veías"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"abas"]; else return [verbStem stringByAppendingString:@"ías"]; } if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { if ( [verb isEqualToString:@"ser"] ) return @"era"; if ( [verb isEqualToString:@"ir"] ) return @"iba"; if ( [verb isEqualToString:@"ver"] ) return @"veía"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"aba"]; else return [verbStem stringByAppendingString:@"ía"]; } if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { if ( [verb isEqualToString:@"ser"] ) return @"éramos"; if ( [verb isEqualToString:@"ir"] ) return @"íbamos"; if ( [verb isEqualToString:@"ver"] ) return @"veíamos"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"ábamos"]; else return [verbStem stringByAppendingString:@"íamos"]; } if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"]) { if ( [verb isEqualToString:@"ser"] ) return @"erais"; if ( [verb isEqualToString:@"ir"] ) return @"ibais"; if ( [verb isEqualToString:@"ver"] ) return @"veíais"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"abais"]; else return [verbStem stringByAppendingString:@"íais"]; } if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { if ( [verb isEqualToString:@"ser"] ) return @"eran"; if ( [verb isEqualToString:@"ir"] ) return @"iban"; if ( [verb isEqualToString:@"ver"] ) return @"veían"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"aban"]; else return [verbStem stringByAppendingString:@"ían"]; } return verb; } // Get stem for Future and Condicional - (NSString *) getFutureStem:(NSString *) verb { // Irregular stem if ( [verb isEqualToString:@"decir"]) return @"dir"; if ( [verb isEqualToString:@"haber"]) return @"habr"; if ( [verb isEqualToString:@"hacer"]) return @"har"; if ( [verb isEqualToString:@"poder"]) return @"podr"; if ( [verb isEqualToString:@"poner"]) return @"pondr"; if ( [verb isEqualToString:@"querer"]) return @"querr"; if ( [verb isEqualToString:@"saber"]) return @"sabr"; if ( [verb isEqualToString:@"salir"]) return @"saldr"; if ( [verb isEqualToString:@"tener"]) return @"tendr"; if ( [verb isEqualToString:@"valer"]) return @"valdr"; if ( [verb isEqualToString:@"venir"]) return @"vendr"; // Regular stem = infinitive return verb; } - (NSString *) conjugateFutureVerb:(NSString *) verb inPerson:(NSString *) person { NSString * verbStem = [self getFutureStem:verb]; // regular if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) return [verbStem stringByAppendingString:@"é"]; if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"]) return [verbStem stringByAppendingString:@"ás"]; if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) return [verbStem stringByAppendingString:@"á"]; if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) return [verbStem stringByAppendingString:@"emos"]; if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"]) return [verbStem stringByAppendingString:@"éis"]; if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) return [verbStem stringByAppendingString:@"án"]; return verb; } - (NSString *) conjugatePerfectVerb:(NSString *) verb { NSString * verbStem = [self getStem:verb]; NSString * verbExit = [self getExit:verb]; if ( [verb rangeOfString:@"abrir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"abrir"] withString:@"abierto"]; if ( [verb rangeOfString:@"cubrir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"cubrir"] withString:@"cubierto"]; if ( [verb rangeOfString:@"decir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"decir"] withString:@"dicho"]; if ( [verb rangeOfString:@"escribir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"escribir"] withString:@"escrito"]; if ( [verb rangeOfString:@"hacer"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"hacer"] withString:@"hecho"]; if ( [verb rangeOfString:@"morir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"morir"] withString:@"muerto"]; if ( [verb rangeOfString:@"poner"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"poner"] withString:@"puesto"]; if ( [verb rangeOfString:@"romper"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"romper"] withString:@"roto"]; if ( [verb rangeOfString:@"volver"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"volver"] withString:@"vuelto"]; if ( [verb isEqualToString:@"ver"]) return @"visto"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"ado"]; else return [verbStem stringByAppendingString:@"ido"]; return verb; } // El perfecto - (NSString *) conjugatePresentPerfectVerb:(NSString *) verb inPerson:(NSString *) person { // Present of haber + Perfect tense return [[[self conjugateSimplePresentVerb:@"haber" inPerson:person] stringByAppendingString:@" "] stringByAppendingString:[self conjugatePerfectVerb:verb]]; } // el pluscuamperfecto - (NSString *) conjugatePastPerfectVerb:(NSString *) verb inPerson:(NSString *) person { // Past of haber + Perfect tense return [[[self conjugateSimplePastVerb:@"haber" inPerson:person] stringByAppendingString:@" "] stringByAppendingString:[self conjugatePerfectVerb:verb]]; } // el futuro perfecto - (NSString *) conjugateFuturePerfectVerb:(NSString *) verb inPerson:(NSString *) person { // Future of haber + Perfect tense return [[[self conjugateFutureVerb:@"haber" inPerson:person] stringByAppendingString:@" "] stringByAppendingString:[self conjugatePerfectVerb:verb]]; } - (NSString *) conjugateVerb:(NSString *) verb inPerson:(NSString *) person andTense:(NSString *) tense { if ( [tense isEqualToString:@"SIMPLE_PRESENT"]) return [self conjugateSimplePresentVerb:verb inPerson:person]; else if ( [tense isEqualToString:@"SIMPLE_PAST"]) return [self conjugateSimplePastVerb:verb inPerson:person]; else if ( [tense isEqualToString:@"IMPERFECT"]) return [self conjugateImperfectVerb:verb inPerson:person]; else if ( [tense isEqualToString:@"FUTURE"]) return [self conjugateFutureVerb:verb inPerson:person]; else if ( [tense isEqualToString:@"PERFECT"]) return [self conjugatePerfectVerb:verb]; else if ( [tense isEqualToString:@"PRESENT_PERFECT"]) return [self conjugatePresentPerfectVerb:verb inPerson:person]; else if ( [tense isEqualToString:@"PAST_PERFECT"]) // Pluscuamperfecto return [self conjugatePastPerfectVerb:verb inPerson:person]; else if ( [tense isEqualToString:@"FUTURE_PERFECT"]) return [self conjugateFuturePerfectVerb:verb inPerson:person]; else return @"Invalid tense"; } @end