577 lines
27 KiB
Objective-C
577 lines
27 KiB
Objective-C
//
|
|
// 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
|