From 3e9eb6a7e0794d251e962c4dbe28911869db1361 Mon Sep 17 00:00:00 2001 From: Abel Fokkinga Date: Fri, 23 Nov 2012 23:06:49 +0100 Subject: [PATCH] Version 0.2 --- Espagram.xcodeproj/project.pbxproj | 146 +- .../UserInterfaceState.xcuserstate | Bin 56390 -> 92387 bytes .../WorkspaceSettings.xcsettings | 12 + .../xcdebugger/Breakpoints.xcbkptlist | 518 ++++ .../xcschemes/Espagram.xcscheme | 2 +- Espagram/ConjugatedTense.h | 21 - Espagram/ConjugatedTense.m | 22 - Espagram/ConjugatedVerbTableView.h | 13 - Espagram/ConjugatedVerbTableView.m | 31 - Espagram/Conjugations.h | 20 - Espagram/Conjugations.m | 19 - Espagram/Conjugator.h | 3 + Espagram/CoreDataTableViewController.h | 53 + Espagram/CoreDataTableViewController.m | 175 ++ Espagram/Espagram-Info.plist | 21 + .../Espagram.xcdatamodeld/.xccurrentversion | 5 +- .../Espagram.xcdatamodel/contents | 20 + Espagram/Espagram/ConjugatedTense.h | 21 - Espagram/Espagram/ConjugatedTense.m | 22 - Espagram/Espagram/ConjugatedVerbTableView.h | 13 - Espagram/Espagram/ConjugatedVerbTableView.m | 31 - Espagram/Espagram/Conjugations.h | 20 - .../EspagramAddWordToLessonViewController.h | 36 + .../EspagramAddWordToLessonViewController.m | 52 + Espagram/EspagramAppDelegate.m | 2 + .../EspagramConjugationTableViewController.h | 20 +- .../EspagramConjugationTableViewController.m | 53 +- Espagram/EspagramLessonViewController.h | 24 + Espagram/EspagramLessonViewController.m | 225 ++ Espagram/EspagramMainTableViewController.h | 3 + Espagram/EspagramMainTableViewController.m | 46 +- Espagram/EspagramNewLessonViewController.h | 34 + Espagram/EspagramNewLessonViewController.m | 70 + Espagram/EspagramTestViewController.h | 24 +- Espagram/EspagramTestViewController.m | 204 +- .../EspagramWordsInLessonViewController.h | 19 + .../EspagramWordsInLessonViewController.m | 140 + Espagram/GrammarTestViewController.h | 21 - Espagram/GrammarTestViewController.m | 69 - Espagram/Lesson+Conjugator.h | 21 + Espagram/Lesson+Conjugator.m | 37 + Espagram/Lesson+Create.h | 18 + Espagram/Lesson+Create.m | 50 + Espagram/Lesson+Test.h | 18 + Espagram/Lesson+Test.m | 33 + Espagram/Lesson.h | 31 + Espagram/Lesson.m | 22 + Espagram/Persons.h | 19 - Espagram/Persons.m | 18 - Espagram/SpanishConjugator.h | 1 - Espagram/SpanishConjugator.m | 2647 ++++++++++++++++- Espagram/Tense.h | 17 + Espagram/Tense.m | 73 + Espagram/Tenses.h | 19 - Espagram/Tenses.m | 18 - Espagram/TestBrain.h | 22 - Espagram/TestBrain.m | 34 - Espagram/TestableVerb.h | 18 + Espagram/TestableVerb.m | 18 + Espagram/Verb+Create.h | 16 + Espagram/Verb+Create.m | 61 + Espagram/Verb.h | 20 + Espagram/Verb.m | 19 + Espagram/Verbs.h | 22 - Espagram/Verbs.m | 21 - Espagram/en.lproj/Localizable.strings | Bin 0 -> 4318 bytes Espagram/en.lproj/MainStoryboard.storyboard | 867 ++++-- Espagram/es.lproj/Localizable.strings | Bin 0 -> 4426 bytes Espagram/nl.lproj/Localizable.strings | 85 + Espagram/pt.lproj/Localizable.strings | Bin 0 -> 1804 bytes iPhoneIcon_Big.png | Bin 0 -> 21356 bytes iPhoneIcon_Small.png | Bin 0 -> 8880 bytes 72 files changed, 5564 insertions(+), 911 deletions(-) delete mode 100644 Espagram/ConjugatedTense.h delete mode 100644 Espagram/ConjugatedTense.m delete mode 100644 Espagram/ConjugatedVerbTableView.h delete mode 100644 Espagram/ConjugatedVerbTableView.m delete mode 100644 Espagram/Conjugations.h delete mode 100644 Espagram/Conjugations.m create mode 100644 Espagram/CoreDataTableViewController.h create mode 100644 Espagram/CoreDataTableViewController.m create mode 100644 Espagram/Espagram.xcdatamodeld/Espagram.xcdatamodel/contents delete mode 100644 Espagram/Espagram/ConjugatedTense.h delete mode 100644 Espagram/Espagram/ConjugatedTense.m delete mode 100644 Espagram/Espagram/ConjugatedVerbTableView.h delete mode 100644 Espagram/Espagram/ConjugatedVerbTableView.m delete mode 100644 Espagram/Espagram/Conjugations.h create mode 100644 Espagram/EspagramAddWordToLessonViewController.h create mode 100644 Espagram/EspagramAddWordToLessonViewController.m create mode 100644 Espagram/EspagramLessonViewController.h create mode 100644 Espagram/EspagramLessonViewController.m create mode 100644 Espagram/EspagramNewLessonViewController.h create mode 100644 Espagram/EspagramNewLessonViewController.m create mode 100644 Espagram/EspagramWordsInLessonViewController.h create mode 100644 Espagram/EspagramWordsInLessonViewController.m delete mode 100644 Espagram/GrammarTestViewController.h delete mode 100644 Espagram/GrammarTestViewController.m create mode 100644 Espagram/Lesson+Conjugator.h create mode 100644 Espagram/Lesson+Conjugator.m create mode 100644 Espagram/Lesson+Create.h create mode 100644 Espagram/Lesson+Create.m create mode 100644 Espagram/Lesson+Test.h create mode 100644 Espagram/Lesson+Test.m create mode 100644 Espagram/Lesson.h create mode 100644 Espagram/Lesson.m delete mode 100644 Espagram/Persons.h delete mode 100644 Espagram/Persons.m create mode 100644 Espagram/Tense.h create mode 100644 Espagram/Tense.m delete mode 100644 Espagram/Tenses.h delete mode 100644 Espagram/Tenses.m delete mode 100644 Espagram/TestBrain.h delete mode 100644 Espagram/TestBrain.m create mode 100644 Espagram/TestableVerb.h create mode 100644 Espagram/TestableVerb.m create mode 100644 Espagram/Verb+Create.h create mode 100644 Espagram/Verb+Create.m create mode 100644 Espagram/Verb.h create mode 100644 Espagram/Verb.m delete mode 100644 Espagram/Verbs.h delete mode 100644 Espagram/Verbs.m create mode 100644 Espagram/en.lproj/Localizable.strings create mode 100644 Espagram/es.lproj/Localizable.strings create mode 100644 Espagram/nl.lproj/Localizable.strings create mode 100644 Espagram/pt.lproj/Localizable.strings create mode 100644 iPhoneIcon_Big.png create mode 100644 iPhoneIcon_Small.png diff --git a/Espagram.xcodeproj/project.pbxproj b/Espagram.xcodeproj/project.pbxproj index d397e00..70002f2 100644 --- a/Espagram.xcodeproj/project.pbxproj +++ b/Espagram.xcodeproj/project.pbxproj @@ -17,10 +17,26 @@ B506EC7915EBF67500566A27 /* EspagramViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B506EC7815EBF67500566A27 /* EspagramViewController.m */; }; B506ECA515EE898700566A27 /* SpanishConjugator.m in Sources */ = {isa = PBXBuildFile; fileRef = B506ECA415EE898700566A27 /* SpanishConjugator.m */; }; B512F63B164BEC6000DA031E /* EspagramTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B512F63A164BEC6000DA031E /* EspagramTestViewController.m */; }; - B512F64A164C2A2700DA031E /* Tense.m in Sources */ = {isa = PBXBuildFile; fileRef = B512F649164C2A2700DA031E /* Tense.m */; }; B512F658164D1A0C00DA031E /* EspagramConjugationTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B512F657164D1A0C00DA031E /* EspagramConjugationTableViewController.m */; }; B512F670164D60DB00DA031E /* EspagramMainTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B512F66F164D60DB00DA031E /* EspagramMainTableViewController.m */; }; - B5EFD38C162CA69F00C6E2EB /* GrammarTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EFD38B162CA69F00C6E2EB /* GrammarTestViewController.m */; }; + B51F8E21164FF8930033B614 /* Tense.m in Sources */ = {isa = PBXBuildFile; fileRef = B51F8E20164FF8930033B614 /* Tense.m */; }; + B51F8E24165199F80033B614 /* Espagram.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B51F8E22165199F80033B614 /* Espagram.xcdatamodeld */; }; + B51F8E3916519C850033B614 /* EspagramLessonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B51F8E3816519C850033B614 /* EspagramLessonViewController.m */; }; + B51F8E4416519D440033B614 /* iPhoneIcon_Small.png in Resources */ = {isa = PBXBuildFile; fileRef = B51F8E4316519D440033B614 /* iPhoneIcon_Small.png */; }; + B51F8E4616519D490033B614 /* iPhoneIcon_Big.png in Resources */ = {isa = PBXBuildFile; fileRef = B51F8E4516519D490033B614 /* iPhoneIcon_Big.png */; }; + B51F8E4816519FE00033B614 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B51F8E4716519FE00033B614 /* CoreData.framework */; }; + B54CFB611652D2A700C0823D /* Lesson+Create.m in Sources */ = {isa = PBXBuildFile; fileRef = B51F8E3C16519D090033B614 /* Lesson+Create.m */; }; + B54CFB6A1652D43900C0823D /* Verb.m in Sources */ = {isa = PBXBuildFile; fileRef = B54CFB691652D43900C0823D /* Verb.m */; }; + B54CFB6D1652D43900C0823D /* Lesson.m in Sources */ = {isa = PBXBuildFile; fileRef = B54CFB6C1652D43900C0823D /* Lesson.m */; }; + B54CFB761652E03600C0823D /* EspagramNewLessonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B54CFB751652E03600C0823D /* EspagramNewLessonViewController.m */; }; + B56DE15C165412DF00D85DD3 /* EspagramWordsInLessonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE15B165412DF00D85DD3 /* EspagramWordsInLessonViewController.m */; }; + B56DE160165426B800D85DD3 /* EspagramAddWordToLessonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE15F165426B800D85DD3 /* EspagramAddWordToLessonViewController.m */; }; + B56DE1631654382500D85DD3 /* Lesson+Conjugator.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE1621654382500D85DD3 /* Lesson+Conjugator.m */; }; + B56DE1661655769300D85DD3 /* TestableVerb.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE1651655769300D85DD3 /* TestableVerb.m */; }; + B56DE1691655774E00D85DD3 /* Lesson+Test.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE1681655774D00D85DD3 /* Lesson+Test.m */; }; + B5A8BB191651A64300C1CC00 /* CoreDataTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B5A8BB181651A3E700C1CC00 /* CoreDataTableViewController.m */; }; + B5B3F92D165972EF00E26A40 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B5B3F92F165972EF00E26A40 /* Localizable.strings */; }; + B5EC6CED1656F1960030C27F /* Verb+Create.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EC6CEC1656F1960030C27F /* Verb+Create.m */; }; B5EFD392162CB18000C6E2EB /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B5EFD391162CB18000C6E2EB /* Default-568h@2x.png */; }; /* End PBXBuildFile section */ @@ -42,16 +58,46 @@ B506ECA415EE898700566A27 /* SpanishConjugator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpanishConjugator.m; sourceTree = ""; }; B512F639164BEC6000DA031E /* EspagramTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramTestViewController.h; sourceTree = ""; }; B512F63A164BEC6000DA031E /* EspagramTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramTestViewController.m; sourceTree = ""; }; - B512F648164C2A2700DA031E /* Tense.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tense.h; sourceTree = ""; }; - B512F649164C2A2700DA031E /* Tense.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Tense.m; sourceTree = ""; }; B512F656164D1A0C00DA031E /* EspagramConjugationTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramConjugationTableViewController.h; sourceTree = ""; }; B512F657164D1A0C00DA031E /* EspagramConjugationTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramConjugationTableViewController.m; sourceTree = ""; }; B512F66E164D60DB00DA031E /* EspagramMainTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramMainTableViewController.h; sourceTree = ""; }; B512F66F164D60DB00DA031E /* EspagramMainTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramMainTableViewController.m; sourceTree = ""; }; + B51F8E1F164FF8930033B614 /* Tense.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tense.h; sourceTree = ""; }; + B51F8E20164FF8930033B614 /* Tense.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Tense.m; sourceTree = ""; }; + B51F8E23165199F80033B614 /* Espagram.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Espagram.xcdatamodel; sourceTree = ""; }; + B51F8E3716519C850033B614 /* EspagramLessonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramLessonViewController.h; sourceTree = ""; }; + B51F8E3816519C850033B614 /* EspagramLessonViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramLessonViewController.m; sourceTree = ""; }; + B51F8E3C16519D090033B614 /* Lesson+Create.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Lesson+Create.m"; sourceTree = ""; }; + B51F8E4316519D440033B614 /* iPhoneIcon_Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iPhoneIcon_Small.png; sourceTree = ""; }; + B51F8E4516519D490033B614 /* iPhoneIcon_Big.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iPhoneIcon_Big.png; sourceTree = ""; }; + B51F8E4716519FE00033B614 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + B54CFB681652D43900C0823D /* Verb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Verb.h; sourceTree = ""; }; + B54CFB691652D43900C0823D /* Verb.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Verb.m; sourceTree = ""; }; + B54CFB6B1652D43900C0823D /* Lesson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lesson.h; sourceTree = ""; }; + B54CFB6C1652D43900C0823D /* Lesson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Lesson.m; sourceTree = ""; }; + B54CFB741652E03600C0823D /* EspagramNewLessonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramNewLessonViewController.h; sourceTree = ""; }; + B54CFB751652E03600C0823D /* EspagramNewLessonViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramNewLessonViewController.m; sourceTree = ""; }; + B56DE15A165412DF00D85DD3 /* EspagramWordsInLessonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramWordsInLessonViewController.h; sourceTree = ""; }; + B56DE15B165412DF00D85DD3 /* EspagramWordsInLessonViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramWordsInLessonViewController.m; sourceTree = ""; }; + B56DE15E165426B800D85DD3 /* EspagramAddWordToLessonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramAddWordToLessonViewController.h; sourceTree = ""; }; + B56DE15F165426B800D85DD3 /* EspagramAddWordToLessonViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramAddWordToLessonViewController.m; sourceTree = ""; }; + B56DE1611654382500D85DD3 /* Lesson+Conjugator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Lesson+Conjugator.h"; sourceTree = ""; }; + B56DE1621654382500D85DD3 /* Lesson+Conjugator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Lesson+Conjugator.m"; sourceTree = ""; }; + B56DE1641655769300D85DD3 /* TestableVerb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestableVerb.h; sourceTree = ""; }; + B56DE1651655769300D85DD3 /* TestableVerb.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestableVerb.m; sourceTree = ""; }; + B56DE1671655774D00D85DD3 /* Lesson+Test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Lesson+Test.h"; sourceTree = ""; }; + B56DE1681655774D00D85DD3 /* Lesson+Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Lesson+Test.m"; sourceTree = ""; }; B58F57661635D27E00CED51B /* Conjugator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Conjugator.h; sourceTree = ""; }; B58F576D16387BE600CED51B /* NSMutableArray_Shuffling.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = NSMutableArray_Shuffling.h; path = Espagram/NSMutableArray_Shuffling.h; sourceTree = ""; }; - B5EFD38A162CA69F00C6E2EB /* GrammarTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrammarTestViewController.h; sourceTree = ""; }; - B5EFD38B162CA69F00C6E2EB /* GrammarTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GrammarTestViewController.m; sourceTree = ""; }; + B5A8BB171651A3E700C1CC00 /* CoreDataTableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoreDataTableViewController.h; sourceTree = ""; }; + B5A8BB181651A3E700C1CC00 /* CoreDataTableViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CoreDataTableViewController.m; sourceTree = ""; }; + B5A8BB1A1652C39600C1CC00 /* Lesson+Create.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Lesson+Create.h"; sourceTree = ""; }; + B5B3F92E165972EF00E26A40 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; + B5B3F930165972F600E26A40 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + B5B3F931165AC79200E26A40 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; + B5B3F932165AD45400E26A40 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; + B5EC6CEB1656F1960030C27F /* Verb+Create.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Verb+Create.h"; sourceTree = ""; }; + B5EC6CEC1656F1960030C27F /* Verb+Create.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Verb+Create.m"; sourceTree = ""; }; B5EFD391162CB18000C6E2EB /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -60,6 +106,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B51F8E4816519FE00033B614 /* CoreData.framework in Frameworks */, B506EC6315EBF67500566A27 /* UIKit.framework in Frameworks */, B506EC6515EBF67500566A27 /* Foundation.framework in Frameworks */, B506EC6715EBF67500566A27 /* CoreGraphics.framework in Frameworks */, @@ -72,6 +119,9 @@ B506EC5315EBF67500566A27 = { isa = PBXGroup; children = ( + B51F8E4716519FE00033B614 /* CoreData.framework */, + B51F8E4516519D490033B614 /* iPhoneIcon_Big.png */, + B51F8E4316519D440033B614 /* iPhoneIcon_Small.png */, B5EFD391162CB18000C6E2EB /* Default-568h@2x.png */, B58F576D16387BE600CED51B /* NSMutableArray_Shuffling.h */, B506EC6815EBF67500566A27 /* Espagram */, @@ -101,25 +151,48 @@ B506EC6815EBF67500566A27 /* Espagram */ = { isa = PBXGroup; children = ( + B54CFB741652E03600C0823D /* EspagramNewLessonViewController.h */, + B54CFB751652E03600C0823D /* EspagramNewLessonViewController.m */, + B5A8BB171651A3E700C1CC00 /* CoreDataTableViewController.h */, + B5A8BB181651A3E700C1CC00 /* CoreDataTableViewController.m */, B506EC7115EBF67500566A27 /* EspagramAppDelegate.h */, B506EC7415EBF67500566A27 /* MainStoryboard.storyboard */, + B56DE15E165426B800D85DD3 /* EspagramAddWordToLessonViewController.h */, + B56DE15F165426B800D85DD3 /* EspagramAddWordToLessonViewController.m */, + B56DE15A165412DF00D85DD3 /* EspagramWordsInLessonViewController.h */, + B56DE15B165412DF00D85DD3 /* EspagramWordsInLessonViewController.m */, + B5EC6CEB1656F1960030C27F /* Verb+Create.h */, + B5EC6CEC1656F1960030C27F /* Verb+Create.m */, + B51F8E3716519C850033B614 /* EspagramLessonViewController.h */, + B51F8E3816519C850033B614 /* EspagramLessonViewController.m */, B512F66E164D60DB00DA031E /* EspagramMainTableViewController.h */, + B51F8E3C16519D090033B614 /* Lesson+Create.m */, + B5A8BB1A1652C39600C1CC00 /* Lesson+Create.h */, B512F66F164D60DB00DA031E /* EspagramMainTableViewController.m */, B512F656164D1A0C00DA031E /* EspagramConjugationTableViewController.h */, B512F657164D1A0C00DA031E /* EspagramConjugationTableViewController.m */, B512F639164BEC6000DA031E /* EspagramTestViewController.h */, B512F63A164BEC6000DA031E /* EspagramTestViewController.m */, - B512F648164C2A2700DA031E /* Tense.h */, - B512F649164C2A2700DA031E /* Tense.m */, B506EC7215EBF67500566A27 /* EspagramAppDelegate.m */, - B5EFD38A162CA69F00C6E2EB /* GrammarTestViewController.h */, - B5EFD38B162CA69F00C6E2EB /* GrammarTestViewController.m */, B506ECA315EE898700566A27 /* SpanishConjugator.h */, B506ECA415EE898700566A27 /* SpanishConjugator.m */, B58F57661635D27E00CED51B /* Conjugator.h */, B506EC7715EBF67500566A27 /* EspagramViewController.h */, B506EC7815EBF67500566A27 /* EspagramViewController.m */, B506EC6915EBF67500566A27 /* Supporting Files */, + B51F8E1F164FF8930033B614 /* Tense.h */, + B51F8E20164FF8930033B614 /* Tense.m */, + B51F8E22165199F80033B614 /* Espagram.xcdatamodeld */, + B54CFB681652D43900C0823D /* Verb.h */, + B54CFB691652D43900C0823D /* Verb.m */, + B54CFB6B1652D43900C0823D /* Lesson.h */, + B54CFB6C1652D43900C0823D /* Lesson.m */, + B56DE1611654382500D85DD3 /* Lesson+Conjugator.h */, + B56DE1621654382500D85DD3 /* Lesson+Conjugator.m */, + B56DE1671655774D00D85DD3 /* Lesson+Test.h */, + B56DE1681655774D00D85DD3 /* Lesson+Test.m */, + B56DE1641655769300D85DD3 /* TestableVerb.h */, + B56DE1651655769300D85DD3 /* TestableVerb.m */, ); path = Espagram; sourceTree = ""; @@ -127,6 +200,7 @@ B506EC6915EBF67500566A27 /* Supporting Files */ = { isa = PBXGroup; children = ( + B5B3F92F165972EF00E26A40 /* Localizable.strings */, B506EC6A15EBF67500566A27 /* Espagram-Info.plist */, B506EC6B15EBF67500566A27 /* InfoPlist.strings */, B506EC6E15EBF67500566A27 /* main.m */, @@ -162,7 +236,7 @@ isa = PBXProject; attributes = { CLASSPREFIX = Espagram; - LastUpgradeCheck = 0440; + LastUpgradeCheck = 0450; ORGANIZATIONNAME = "Abel Fokkinga"; }; buildConfigurationList = B506EC5815EBF67500566A27 /* Build configuration list for PBXProject "Espagram" */; @@ -171,6 +245,9 @@ hasScannedForEncodings = 0; knownRegions = ( en, + nl, + es, + pt, ); mainGroup = B506EC5315EBF67500566A27; productRefGroup = B506EC5F15EBF67500566A27 /* Products */; @@ -190,6 +267,9 @@ B506EC6D15EBF67500566A27 /* InfoPlist.strings in Resources */, B506EC7615EBF67500566A27 /* MainStoryboard.storyboard in Resources */, B5EFD392162CB18000C6E2EB /* Default-568h@2x.png in Resources */, + B51F8E4416519D440033B614 /* iPhoneIcon_Small.png in Resources */, + B51F8E4616519D490033B614 /* iPhoneIcon_Big.png in Resources */, + B5B3F92D165972EF00E26A40 /* Localizable.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -204,11 +284,23 @@ B506EC7315EBF67500566A27 /* EspagramAppDelegate.m in Sources */, B506EC7915EBF67500566A27 /* EspagramViewController.m in Sources */, B506ECA515EE898700566A27 /* SpanishConjugator.m in Sources */, - B5EFD38C162CA69F00C6E2EB /* GrammarTestViewController.m in Sources */, B512F63B164BEC6000DA031E /* EspagramTestViewController.m in Sources */, - B512F64A164C2A2700DA031E /* Tense.m in Sources */, B512F658164D1A0C00DA031E /* EspagramConjugationTableViewController.m in Sources */, B512F670164D60DB00DA031E /* EspagramMainTableViewController.m in Sources */, + B51F8E21164FF8930033B614 /* Tense.m in Sources */, + B51F8E24165199F80033B614 /* Espagram.xcdatamodeld in Sources */, + B51F8E3916519C850033B614 /* EspagramLessonViewController.m in Sources */, + B5A8BB191651A64300C1CC00 /* CoreDataTableViewController.m in Sources */, + B54CFB611652D2A700C0823D /* Lesson+Create.m in Sources */, + B54CFB6A1652D43900C0823D /* Verb.m in Sources */, + B54CFB6D1652D43900C0823D /* Lesson.m in Sources */, + B54CFB761652E03600C0823D /* EspagramNewLessonViewController.m in Sources */, + B56DE15C165412DF00D85DD3 /* EspagramWordsInLessonViewController.m in Sources */, + B56DE160165426B800D85DD3 /* EspagramAddWordToLessonViewController.m in Sources */, + B56DE1631654382500D85DD3 /* Lesson+Conjugator.m in Sources */, + B56DE1661655769300D85DD3 /* TestableVerb.m in Sources */, + B56DE1691655774E00D85DD3 /* Lesson+Test.m in Sources */, + B5EC6CED1656F1960030C27F /* Verb+Create.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -231,6 +323,17 @@ name = MainStoryboard.storyboard; sourceTree = ""; }; + B5B3F92F165972EF00E26A40 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + B5B3F92E165972EF00E26A40 /* nl */, + B5B3F930165972F600E26A40 /* en */, + B5B3F931165AC79200E26A40 /* es */, + B5B3F932165AD45400E26A40 /* pt */, + ); + name = Localizable.strings; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -256,7 +359,7 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; SDKROOT = iphoneos; }; name = Debug; @@ -276,7 +379,7 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.1; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; @@ -331,6 +434,19 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + B51F8E22165199F80033B614 /* Espagram.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + B51F8E23165199F80033B614 /* Espagram.xcdatamodel */, + ); + currentVersion = B51F8E23165199F80033B614 /* Espagram.xcdatamodel */; + path = Espagram.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ }; rootObject = B506EC5515EBF67500566A27 /* Project object */; } diff --git a/Espagram.xcodeproj/project.xcworkspace/xcuserdata/abel.xcuserdatad/UserInterfaceState.xcuserstate b/Espagram.xcodeproj/project.xcworkspace/xcuserdata/abel.xcuserdatad/UserInterfaceState.xcuserstate index 3ccf065d1889dda83d82def0baad4372da29efdb..bc52c90f7f6689c63c04a8bc12f7a8f1b6d275c5 100644 GIT binary patch literal 92387 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ї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

#wePchYp4Yh|VfOs9l0UMT4$ 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ʁ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 a+W^~~eqh$7&6x48v)!zJo&P*;bN)Zq*3pvy diff --git a/Espagram.xcodeproj/project.xcworkspace/xcuserdata/abel.xcuserdatad/WorkspaceSettings.xcsettings b/Espagram.xcodeproj/project.xcworkspace/xcuserdata/abel.xcuserdatad/WorkspaceSettings.xcsettings index 659c876..28f6741 100644 --- a/Espagram.xcodeproj/project.xcworkspace/xcuserdata/abel.xcuserdatad/WorkspaceSettings.xcsettings +++ b/Espagram.xcodeproj/project.xcworkspace/xcuserdata/abel.xcuserdatad/WorkspaceSettings.xcsettings @@ -2,9 +2,21 @@ + BuildLocationStyle + UseAppPreferences + CustomBuildLocationType + RelativeToDerivedData + DerivedDataLocationStyle + Default HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + IssueFilterStyle + ShowActiveSchemeOnly + LiveSourceIssuesEnabled + SnapshotAutomaticallyBeforeSignificantChanges + SnapshotLocationStyle + Default diff --git a/Espagram.xcodeproj/xcuserdata/abel.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/Espagram.xcodeproj/xcuserdata/abel.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist index 3e56e74..dd1b4a0 100644 --- a/Espagram.xcodeproj/xcuserdata/abel.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist +++ b/Espagram.xcodeproj/xcuserdata/abel.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -16,5 +16,523 @@ landmarkName = "-getSimplePresentStemVerb:inPerson:" landmarkType = "5"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Espagram.xcodeproj/xcuserdata/abel.xcuserdatad/xcschemes/Espagram.xcscheme b/Espagram.xcodeproj/xcuserdata/abel.xcuserdatad/xcschemes/Espagram.xcscheme index 47148e2..f7f913c 100644 --- a/Espagram.xcodeproj/xcuserdata/abel.xcuserdatad/xcschemes/Espagram.xcscheme +++ b/Espagram.xcodeproj/xcuserdata/abel.xcuserdatad/xcschemes/Espagram.xcscheme @@ -1,6 +1,6 @@ -#import - -@class Conjugations, Tenses, Verbs; - -@interface ConjugatedTense : NSManagedObject - -@property (nonatomic, retain) NSNumber * regularConjugation; -@property (nonatomic, retain) Verbs *verb; -@property (nonatomic, retain) Tenses *tense; -@property (nonatomic, retain) Conjugations *irregularConjugation; - -@end diff --git a/Espagram/ConjugatedTense.m b/Espagram/ConjugatedTense.m deleted file mode 100644 index b84ae35..0000000 --- a/Espagram/ConjugatedTense.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// ConjugatedTense.m -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "ConjugatedTense.h" -#import "Conjugations.h" -#import "Tenses.h" -#import "Verbs.h" - - -@implementation ConjugatedTense - -@dynamic regularConjugation; -@dynamic verb; -@dynamic tense; -@dynamic irregularConjugation; - -@end diff --git a/Espagram/ConjugatedVerbTableView.h b/Espagram/ConjugatedVerbTableView.h deleted file mode 100644 index c628da9..0000000 --- a/Espagram/ConjugatedVerbTableView.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ConjugatedVerbTableView.h -// Espagram -// -// Created by Abel Fokkinga on 11/8/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import - -@interface ConjugatedVerbTableView : UITableView - -@end diff --git a/Espagram/ConjugatedVerbTableView.m b/Espagram/ConjugatedVerbTableView.m deleted file mode 100644 index a5a43b6..0000000 --- a/Espagram/ConjugatedVerbTableView.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// ConjugatedVerbTableView.m -// Espagram -// -// Created by Abel Fokkinga on 11/8/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "ConjugatedVerbTableView.h" - -@implementation ConjugatedVerbTableView - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - } - return self; -} - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/Espagram/Conjugations.h b/Espagram/Conjugations.h deleted file mode 100644 index 9f93f33..0000000 --- a/Espagram/Conjugations.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Conjugations.h -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import -#import - -@class Persons; - -@interface Conjugations : NSManagedObject - -@property (nonatomic, retain) NSString * root; -@property (nonatomic, retain) NSString * exit; -@property (nonatomic, retain) Persons *conjugationPerson; - -@end diff --git a/Espagram/Conjugations.m b/Espagram/Conjugations.m deleted file mode 100644 index 44bc4bd..0000000 --- a/Espagram/Conjugations.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// Conjugations.m -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "Conjugations.h" -#import "Persons.h" - - -@implementation Conjugations - -@dynamic root; -@dynamic exit; -@dynamic conjugationPerson; - -@end diff --git a/Espagram/Conjugator.h b/Espagram/Conjugator.h index 1acb3e1..e99efa2 100644 --- a/Espagram/Conjugator.h +++ b/Espagram/Conjugator.h @@ -13,10 +13,13 @@ - (NSDictionary *) persons; +- (NSDictionary *) reflexivePersons; - (NSArray *) personsKeys; - (NSString *) conjugateVerb:(NSString *) verb inPerson:(NSString *) person andTense:(Tense *) tense; +- (NSMutableArray *) getTestConjugationsForVerb:(NSString *) verb inPerson:(NSString *) person andTense:(Tense *) tense; + - (NSString *) description; @end diff --git a/Espagram/CoreDataTableViewController.h b/Espagram/CoreDataTableViewController.h new file mode 100644 index 0000000..0f138b4 --- /dev/null +++ b/Espagram/CoreDataTableViewController.h @@ -0,0 +1,53 @@ +// +// CoreDataTableViewController.h +// +// Created for Stanford CS193p Fall 2011. +// Copyright 2011 Stanford University. All rights reserved. +// +// This class mostly just copies the code from NSFetchedResultsController's documentation page +// into a subclass of UITableViewController. +// +// Just subclass this and set the fetchedResultsController. +// The only UITableViewDataSource method you'll HAVE to implement is tableView:cellForRowAtIndexPath:. +// And you can use the NSFetchedResultsController method objectAtIndexPath: to do it. +// +// Remember that once you create an NSFetchedResultsController, you CANNOT modify its @propertys. +// If you want new fetch parameters (predicate, sorting, etc.), +// create a NEW NSFetchedResultsController and set this class's fetchedResultsController @property again. +// + +#import +#import + +@interface CoreDataTableViewController : UITableViewController + +// The controller (this class fetches nothing if this is not set). +@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; + +// Causes the fetchedResultsController to refetch the data. +// You almost certainly never need to call this. +// The NSFetchedResultsController class observes the context +// (so if the objects in the context change, you do not need to call performFetch +// since the NSFetchedResultsController will notice and update the table automatically). +// This will also automatically be called if you change the fetchedResultsController @property. +- (void)performFetch; + +// Turn this on before making any changes in the managed object context that +// are a one-for-one result of the user manipulating rows directly in the table view. +// Such changes cause the context to report them (after a brief delay), +// and normally our fetchedResultsController would then try to update the table, +// but that is unnecessary because the changes were made in the table already (by the user) +// so the fetchedResultsController has nothing to do and needs to ignore those reports. +// Turn this back off after the user has finished the change. +// Note that the effect of setting this to NO actually gets delayed slightly +// so as to ignore previously-posted, but not-yet-processed context-changed notifications, +// therefore it is fine to set this to YES at the beginning of, e.g., tableView:moveRowAtIndexPath:toIndexPath:, +// and then set it back to NO at the end of your implementation of that method. +// It is not necessary (in fact, not desirable) to set this during row deletion or insertion +// (but definitely for row moves). +@property (nonatomic) BOOL suspendAutomaticTrackingOfChangesInManagedObjectContext; + +// Set to YES to get some debugging output in the console. +@property BOOL debug; + +@end diff --git a/Espagram/CoreDataTableViewController.m b/Espagram/CoreDataTableViewController.m new file mode 100644 index 0000000..82f511e --- /dev/null +++ b/Espagram/CoreDataTableViewController.m @@ -0,0 +1,175 @@ +// +// CoreDataTableViewController.m +// +// Created for Stanford CS193p Fall 2011. +// Copyright 2011 Stanford University. All rights reserved. +// + +#import "CoreDataTableViewController.h" + +@interface CoreDataTableViewController() +@property (nonatomic) BOOL beganUpdates; +@end + +@implementation CoreDataTableViewController + +#pragma mark - Properties + +@synthesize fetchedResultsController = _fetchedResultsController; +@synthesize suspendAutomaticTrackingOfChangesInManagedObjectContext = _suspendAutomaticTrackingOfChangesInManagedObjectContext; +@synthesize debug = _debug; +@synthesize beganUpdates = _beganUpdates; + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return YES; +} + +#pragma mark - Fetching + +- (void)performFetch +{ + if (self.fetchedResultsController) { + if (self.fetchedResultsController.fetchRequest.predicate) { + if (self.debug) NSLog(@"[%@ %@] fetching %@ with predicate: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName, self.fetchedResultsController.fetchRequest.predicate); + } else { + if (self.debug) NSLog(@"[%@ %@] fetching all %@ (i.e., no predicate)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName); + } + NSError *error; + [self.fetchedResultsController performFetch:&error]; + if (error) NSLog(@"[%@ %@] %@ (%@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), [error localizedDescription], [error localizedFailureReason]); + } else { + if (self.debug) NSLog(@"[%@ %@] no NSFetchedResultsController (yet?)", NSStringFromClass([self class]), NSStringFromSelector(_cmd)); + } + [self.tableView reloadData]; +} + +- (void)setFetchedResultsController:(NSFetchedResultsController *)newfrc +{ + NSFetchedResultsController *oldfrc = _fetchedResultsController; + if (newfrc != oldfrc) { + _fetchedResultsController = newfrc; + newfrc.delegate = self; + if ((!self.title || [self.title isEqualToString:oldfrc.fetchRequest.entity.name]) && (!self.navigationController || !self.navigationItem.title)) { + self.title = newfrc.fetchRequest.entity.name; + } + if (newfrc) { + if (self.debug) NSLog(@"[%@ %@] %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), oldfrc ? @"updated" : @"set"); + [self performFetch]; + } else { + if (self.debug) NSLog(@"[%@ %@] reset to nil", NSStringFromClass([self class]), NSStringFromSelector(_cmd)); + [self.tableView reloadData]; + } + } +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return [[self.fetchedResultsController sections] count]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects]; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section +{ + return [[[self.fetchedResultsController sections] objectAtIndex:section] name]; +} + +- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index +{ + return [self.fetchedResultsController sectionForSectionIndexTitle:title atIndex:index]; +} + +- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView +{ + return [self.fetchedResultsController sectionIndexTitles]; +} + +#pragma mark - NSFetchedResultsControllerDelegate + +- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller +{ + if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext) { + [self.tableView beginUpdates]; + self.beganUpdates = YES; + } +} + +- (void)controller:(NSFetchedResultsController *)controller + didChangeSection:(id )sectionInfo + atIndex:(NSUInteger)sectionIndex + forChangeType:(NSFetchedResultsChangeType)type +{ + if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext) + { + switch(type) + { + case NSFetchedResultsChangeInsert: + [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade]; + break; + + case NSFetchedResultsChangeDelete: + [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade]; + break; + } + } +} + + +- (void)controller:(NSFetchedResultsController *)controller + didChangeObject:(id)anObject + atIndexPath:(NSIndexPath *)indexPath + forChangeType:(NSFetchedResultsChangeType)type + newIndexPath:(NSIndexPath *)newIndexPath +{ + if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext) + { + switch(type) + { + case NSFetchedResultsChangeInsert: + [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; + break; + + case NSFetchedResultsChangeDelete: + [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; + break; + + case NSFetchedResultsChangeUpdate: + [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; + break; + + case NSFetchedResultsChangeMove: + [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; + [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade]; + break; + } + } +} + + +- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller +{ + if (self.beganUpdates) [self.tableView endUpdates]; +} + +- (void)endSuspensionOfUpdatesDueToContextChanges +{ + _suspendAutomaticTrackingOfChangesInManagedObjectContext = NO; +} + +- (void)setSuspendAutomaticTrackingOfChangesInManagedObjectContext:(BOOL)suspend +{ + if (suspend) { + _suspendAutomaticTrackingOfChangesInManagedObjectContext = YES; + } else { + [self performSelector:@selector(endSuspensionOfUpdatesDueToContextChanges) withObject:0 afterDelay:0]; + } +} + +@end + diff --git a/Espagram/Espagram-Info.plist b/Espagram/Espagram-Info.plist index 6e6f80f..df6d18c 100644 --- a/Espagram/Espagram-Info.plist +++ b/Espagram/Espagram-Info.plist @@ -8,10 +8,27 @@ ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} + CFBundleGetInfoString + + CFBundleIcons + + CFBundlePrimaryIcon + + CFBundleIconFiles + + iPhoneIcon_Small.png + iPhoneIcon_Big.png + + + CFBundleIdentifier com.fokkinga.abel.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 + CFBundleLocalizations + + en + CFBundleName ${PRODUCT_NAME} CFBundlePackageType @@ -22,8 +39,12 @@ ???? CFBundleVersion 1.0 + LSApplicationCategoryType + LSRequiresIPhoneOS + NSHumanReadableCopyright + Abel Fokkinga UIMainStoryboardFile MainStoryboard UIRequiredDeviceCapabilities diff --git a/Espagram/Espagram.xcdatamodeld/.xccurrentversion b/Espagram/Espagram.xcdatamodeld/.xccurrentversion index 0c67376..d84f9ae 100644 --- a/Espagram/Espagram.xcdatamodeld/.xccurrentversion +++ b/Espagram/Espagram.xcdatamodeld/.xccurrentversion @@ -1,5 +1,8 @@ - + + _XCCurrentVersionName + Espagram.xcdatamodel + diff --git a/Espagram/Espagram.xcdatamodeld/Espagram.xcdatamodel/contents b/Espagram/Espagram.xcdatamodeld/Espagram.xcdatamodel/contents new file mode 100644 index 0000000..5a27510 --- /dev/null +++ b/Espagram/Espagram.xcdatamodeld/Espagram.xcdatamodel/contents @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Espagram/Espagram/ConjugatedTense.h b/Espagram/Espagram/ConjugatedTense.h deleted file mode 100644 index 67353a2..0000000 --- a/Espagram/Espagram/ConjugatedTense.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// ConjugatedTense.h -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import -#import - -@class Conjugations, Tenses, Verbs; - -@interface ConjugatedTense : NSManagedObject - -@property (nonatomic, retain) NSNumber * regularConjugation; -@property (nonatomic, retain) Verbs *verb; -@property (nonatomic, retain) Tenses *tense; -@property (nonatomic, retain) Conjugations *irregularConjugation; - -@end diff --git a/Espagram/Espagram/ConjugatedTense.m b/Espagram/Espagram/ConjugatedTense.m deleted file mode 100644 index b84ae35..0000000 --- a/Espagram/Espagram/ConjugatedTense.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// ConjugatedTense.m -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "ConjugatedTense.h" -#import "Conjugations.h" -#import "Tenses.h" -#import "Verbs.h" - - -@implementation ConjugatedTense - -@dynamic regularConjugation; -@dynamic verb; -@dynamic tense; -@dynamic irregularConjugation; - -@end diff --git a/Espagram/Espagram/ConjugatedVerbTableView.h b/Espagram/Espagram/ConjugatedVerbTableView.h deleted file mode 100644 index c628da9..0000000 --- a/Espagram/Espagram/ConjugatedVerbTableView.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ConjugatedVerbTableView.h -// Espagram -// -// Created by Abel Fokkinga on 11/8/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import - -@interface ConjugatedVerbTableView : UITableView - -@end diff --git a/Espagram/Espagram/ConjugatedVerbTableView.m b/Espagram/Espagram/ConjugatedVerbTableView.m deleted file mode 100644 index a5a43b6..0000000 --- a/Espagram/Espagram/ConjugatedVerbTableView.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// ConjugatedVerbTableView.m -// Espagram -// -// Created by Abel Fokkinga on 11/8/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "ConjugatedVerbTableView.h" - -@implementation ConjugatedVerbTableView - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - } - return self; -} - -/* -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawRect:(CGRect)rect -{ - // Drawing code -} -*/ - -@end diff --git a/Espagram/Espagram/Conjugations.h b/Espagram/Espagram/Conjugations.h deleted file mode 100644 index 9f93f33..0000000 --- a/Espagram/Espagram/Conjugations.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Conjugations.h -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import -#import - -@class Persons; - -@interface Conjugations : NSManagedObject - -@property (nonatomic, retain) NSString * root; -@property (nonatomic, retain) NSString * exit; -@property (nonatomic, retain) Persons *conjugationPerson; - -@end diff --git a/Espagram/EspagramAddWordToLessonViewController.h b/Espagram/EspagramAddWordToLessonViewController.h new file mode 100644 index 0000000..90986f4 --- /dev/null +++ b/Espagram/EspagramAddWordToLessonViewController.h @@ -0,0 +1,36 @@ +// +// EspagramAddWordToLessonViewController.h +// Espagram +// +// Created by Abel Fokkinga on 11/14/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import + +@class EspagramAddWordToLessonViewController; +@protocol EspagramAddWordToLessonViewControllerDelegate + +- (void) addWord:(NSString *)word withMeaning:(NSString *)meaning; + +- (void) cancelAddingWord; + +@end + +@interface EspagramAddWordToLessonViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UILabel *wordLabel; + +@property (weak, nonatomic) IBOutlet UILabel *meaningLabel; + +@property (weak, nonatomic) IBOutlet UIButton *addButton; + +@property (weak, nonatomic) IBOutlet UIButton *cancelButton; + +@property (weak, nonatomic) IBOutlet UITextField *wordInputText; + +@property (weak, nonatomic) IBOutlet UITextField *meaningInputText; + +@property (nonatomic,strong) id dataSource; + +@end diff --git a/Espagram/EspagramAddWordToLessonViewController.m b/Espagram/EspagramAddWordToLessonViewController.m new file mode 100644 index 0000000..30f09c6 --- /dev/null +++ b/Espagram/EspagramAddWordToLessonViewController.m @@ -0,0 +1,52 @@ +// +// EspagramAddWordToLessonViewController.m +// Espagram +// +// Created by Abel Fokkinga on 11/14/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "EspagramAddWordToLessonViewController.h" + +@interface EspagramAddWordToLessonViewController () + +@end + +@implementation EspagramAddWordToLessonViewController + +@synthesize dataSource = _dataSource; +@synthesize wordLabel = _wordLabel; +@synthesize meaningLabel = _meaningLabel; +@synthesize wordInputText = _wordInputText; +@synthesize meaningInputText = _meaningInputText; +@synthesize addButton = _addButton; +@synthesize cancelButton = _cancelButton; + +- (IBAction)editingDidEnd { + [self resignFirstResponder]; +} + + +- (IBAction)addButtonPressed:(id)sender { + [self.dataSource addWord: self.wordInputText.text withMeaning:self.meaningInputText.text]; +} + +- (IBAction)cancelButtonPressed:(id)sender { + [self.dataSource cancelAddingWord]; +} + + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + self.wordLabel.text = NSLocalizedString(@"New verb", @"Adding a new verb to a lesson"); + self.meaningLabel.text = NSLocalizedString(@"Meaning", @"Adding the meaning of a new verb being added to a lesson"); + + [self.addButton setTitle:NSLocalizedString(@"Add Verb", @"Add button when adding a verb to a lesson") forState:UIControlStateNormal]; + + [self.cancelButton setTitle:NSLocalizedString(@"Cancel Verb",@"Cancel button to cancel adding a verb to a lesson") forState:UIControlStateNormal]; +} + + +@end diff --git a/Espagram/EspagramAppDelegate.m b/Espagram/EspagramAppDelegate.m index b7e78dc..7589d8e 100644 --- a/Espagram/EspagramAppDelegate.m +++ b/Espagram/EspagramAppDelegate.m @@ -43,4 +43,6 @@ // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } + + @end diff --git a/Espagram/EspagramConjugationTableViewController.h b/Espagram/EspagramConjugationTableViewController.h index da5254b..e23a321 100644 --- a/Espagram/EspagramConjugationTableViewController.h +++ b/Espagram/EspagramConjugationTableViewController.h @@ -7,24 +7,12 @@ // #import -#import "Conjugator.h" - -@class EspagramConjugationTableViewController; - -@protocol EspagramConjugationTableView - -@property (strong, nonatomic) id conjugator; -@property (strong, nonatomic) Tense *tense; -@property (strong, nonatomic) NSString* verb; - -@end +#import "SpanishConjugator.h" +#import "Lesson+Conjugator.h" +#import "Verb.h" @interface EspagramConjugationTableViewController : UITableViewController -@property (weak, nonatomic) IBOutlet UITextField *verbInput; - -@property (nonatomic, strong) id dataSource; - -- (void) reloadData; +@property (weak, nonatomic) IBOutlet Verb *verb; @end diff --git a/Espagram/EspagramConjugationTableViewController.m b/Espagram/EspagramConjugationTableViewController.m index c370050..f218a03 100644 --- a/Espagram/EspagramConjugationTableViewController.m +++ b/Espagram/EspagramConjugationTableViewController.m @@ -14,40 +14,8 @@ @implementation EspagramConjugationTableViewController -@synthesize dataSource = _dataSource; +@synthesize verb = _verb; -- (void) dataSource:(id ) dataSource { - _dataSource = dataSource; - [self reloadData]; -} - -- (IBAction)verbEntered:(id)sender { - [self.view resignFirstResponder]; -} - -- (id)initWithStyle:(UITableViewStyle)style -{ - self = [super initWithStyle:style]; - if (self) { - // Custom initialization - } - return self; -} - -- (void) reloadData { - if (_dataSource) { - NSLog(@"language %@", [self.dataSource.conjugator description]); - NSLog(@"persons %d", self.dataSource.conjugator.persons.count); - [self.tableView reloadData]; - } else NSLog(@"Datasource is nil"); -} - - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} #pragma mark - Table view data source @@ -55,12 +23,11 @@ { return 1; } - - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. - return [[[self.dataSource conjugator] persons] count]; + return [[[self.verb.lesson getConjugationEngine] persons] count]; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section @@ -69,7 +36,7 @@ switch (section) { case 0: - sectionName = self.dataSource.verb; + sectionName = self.verb.verb; break; default: sectionName = @""; @@ -88,20 +55,20 @@ } - NSString * person = [[self.dataSource.conjugator personsKeys] objectAtIndex:indexPath.row]; - cell.textLabel.text = [self.dataSource.conjugator.persons objectForKey:person]; - cell.detailTextLabel.text = [self.dataSource.conjugator conjugateVerb:self.dataSource.verb inPerson:person andTense:self.dataSource.tense]; + NSString * person = [[[self.verb.lesson getConjugationEngine] personsKeys] objectAtIndex:indexPath.row]; + cell.textLabel.text = [[[self.verb.lesson getConjugationEngine] persons] objectForKey:person]; + cell.detailTextLabel.text = [[self.verb.lesson getConjugationEngine] conjugateVerb:self.verb.verb inPerson:person andTense:[self.verb.lesson getTenseAsTense]]; return cell; } -- (void)viewDidLoad +- (void) viewDidAppear:(BOOL)animated { - [self.tableView reloadData]; + [super viewDidAppear:animated]; + self.title = [[self.verb.lesson getTenseAsTense] getTenseInLanguage:self.verb.lesson.conjugator]; + } - - #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath diff --git a/Espagram/EspagramLessonViewController.h b/Espagram/EspagramLessonViewController.h new file mode 100644 index 0000000..7f7e8ce --- /dev/null +++ b/Espagram/EspagramLessonViewController.h @@ -0,0 +1,24 @@ +// +// EspagramLessonViewController.h +// Espagram +// +// Created by Abel Fokkinga on 11/12/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import +#import "CoreDataTableViewController.h" +#import "Conjugator.h" +#import "EspagramNewLessonViewController.h" +#import "Tense.h" + + +@interface EspagramLessonViewController : CoreDataTableViewController + +@property (nonatomic, strong) UIManagedDocument * lessonsDatabase; +@property (nonatomic, strong) +id conjugator; +@property (nonatomic, strong) +Tense * tense; + +@end diff --git a/Espagram/EspagramLessonViewController.m b/Espagram/EspagramLessonViewController.m new file mode 100644 index 0000000..f80dfd0 --- /dev/null +++ b/Espagram/EspagramLessonViewController.m @@ -0,0 +1,225 @@ +// +// EspagramLessonViewController.m +// Espagram +// +// Created by Abel Fokkinga on 11/12/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "EspagramLessonViewController.h" +#import "Lesson+Create.h" +#import "Lesson+Conjugator.h" +#import "EspagramTestViewController.h" + + +@interface EspagramLessonViewController () +@end + +@implementation EspagramLessonViewController + +@synthesize lessonsDatabase = _lessonsDatabase; +@synthesize conjugator = _conjugator; +@synthesize tense = _tense; + + +- (IBAction)addLessonButtonPressed:(id)sender { + [self performSegueWithIdentifier:@"Add new Lesson" sender:self]; +} + +- (void) addLesson:(NSString*)title withDescription:(NSString*) subTitle { + + NSLog(@"Need to dismiss modal view controller"); + [[self presentedViewController] dismissViewControllerAnimated:TRUE completion:^{ + NSLog(@"View controller dismissed"); + }]; + + NSLog(@"database %@, context %@", self.lessonsDatabase,[self.lessonsDatabase managedObjectContext]); + + [Lesson addLessonWithTitle:title andSubTitle:subTitle inTense:self.tense conjugatedBy:self.conjugator inManagedObjectContext:[self.lessonsDatabase managedObjectContext]]; + + [self.lessonsDatabase saveToURL:self.lessonsDatabase.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL]; +} + +- (void) cancelLesson{ + NSLog(@"Cancel pressed, need to dismiss modal view controller"); + [[self presentedViewController] dismissViewControllerAnimated:TRUE completion:^{ + NSLog(@"View controller dismissed"); + }]; +} + + + + +#pragma mark - View lifecycle + + +- (void) setupFetchedResultsController{ + NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Lesson"]; + + self.debug = TRUE; + + // Where clause + request.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[NSPredicate predicateWithFormat:@"tense = %@", self.tense.tense], [NSPredicate predicateWithFormat:@"conjugator = %@", [self.conjugator description]],nil]]; + + + request.sortDescriptors = [[NSArray alloc] initWithObjects:[[NSSortDescriptor alloc] initWithKey:@"title" ascending:TRUE], nil]; + + self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.lessonsDatabase.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; +} + +- (void) createDocument +{ + [self.lessonsDatabase saveToURL:self.lessonsDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL succes){ + NSLog(@"Created lessons database"); + }]; + +} + + +- (void) useDocument +{ + if (![[NSFileManager defaultManager] fileExistsAtPath:[self.lessonsDatabase.fileURL path]]) { + [self createDocument]; + [self fetchedResultsController]; + } else if (self.lessonsDatabase.documentState == UIDocumentStateClosed){ + [self.lessonsDatabase openWithCompletionHandler:^(BOOL succes){ + NSLog(@"Opened lessons database"); + [self setupFetchedResultsController]; + }]; + } else if (self.lessonsDatabase.documentState == UIDocumentStateNormal) { + [self setupFetchedResultsController]; + } + +} + + +- (void) setLessonsDatabase:(UIManagedDocument *)lessonsDatabase{ + if ( _lessonsDatabase != lessonsDatabase ) { + _lessonsDatabase = lessonsDatabase; + [self useDocument]; + } + +} + +- (void)viewWillAppear:(BOOL)animated{ + + [super viewWillAppear:animated]; + + self.title = NSLocalizedString(@"Lessons title",@"Lessons title"); + + if (!self.lessonsDatabase) { // We'll create a default database if none is set + NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDirectory] lastObject]; + url = [url URLByAppendingPathComponent:@"Default Espagram database"]; + + UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url]; + NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, + [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; + doc.persistentStoreOptions = options; + self.lessonsDatabase = doc; + } + +} + + +- (void)viewDidUnload { + + [super viewDidUnload]; + + [self.lessonsDatabase closeWithCompletionHandler:^(BOOL success) { + NSLog(@"Database closed"); + }]; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Lesson cell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; + + Lesson *lesson = [self.fetchedResultsController objectAtIndexPath:indexPath]; + NSLog(@"Showing lesson: %@", lesson.title); + cell.textLabel.text = lesson.title; + cell.detailTextLabel.text = lesson.subTitle; + + return cell; +} + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender +{ + NSIndexPath * indexPath = [self.tableView indexPathForCell:sender]; + Lesson * lesson = [self.fetchedResultsController objectAtIndexPath:indexPath]; + + if ( [segue.identifier isEqualToString:@"Testing"]){ + NSLog(@"Preparing for segue Testing"); + + if ([segue.destinationViewController respondsToSelector:@selector(setConjugator:)]) { + [segue.destinationViewController setConjugator:self.conjugator]; + } + + + if ([segue.destinationViewController respondsToSelector:@selector(setLesson:)]) { + [segue.destinationViewController setLesson:lesson]; + [segue.destinationViewController setTitle:lesson.title]; + } + } + + if ( [segue.identifier isEqualToString:@"Add new Lesson"]){ + NSLog(@"Preparing for segue Add new Lesson"); + [segue.destinationViewController setDataSource:self]; + } + + if ( [segue.identifier isEqualToString:@"Show Words In Lesson"]){ + NSLog(@"Preparing for segue Show Words In Lesson"); + if ([segue.destinationViewController respondsToSelector:@selector(setLesson:)]) { + [segue.destinationViewController setLesson:lesson]; + } + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + Lesson * lesson = [self.fetchedResultsController objectAtIndexPath:indexPath]; + + if ( [lesson.verbs count] == 0) { + // Lesson contains no words yet.. so go to the WordsInLessonView to add them + // sender is the selected cell + [self performSegueWithIdentifier:@"Show Words In Lesson" sender:[self.tableView cellForRowAtIndexPath:indexPath]]; + } else { + [self performSegueWithIdentifier:@"Testing" sender:[self.tableView cellForRowAtIndexPath:indexPath]]; + } + + +} + +- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath +{ + [self performSegueWithIdentifier:@"Show Words In Lesson" sender:[self.tableView cellForRowAtIndexPath:indexPath]]; +} + +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath +{ + // Return NO if you do not want the specified item to be editable. + return YES; +} + + + +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + //[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + Lesson * selectedLesson = [self.fetchedResultsController objectAtIndexPath:indexPath]; + [[self.lessonsDatabase managedObjectContext] deleteObject:selectedLesson]; + } + // else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + // } +} + + + +@end diff --git a/Espagram/EspagramMainTableViewController.h b/Espagram/EspagramMainTableViewController.h index 3e040d4..8f7ed8f 100644 --- a/Espagram/EspagramMainTableViewController.h +++ b/Espagram/EspagramMainTableViewController.h @@ -10,4 +10,7 @@ @interface EspagramMainTableViewController : UITableViewController + +@property (weak, nonatomic) IBOutlet UIBarButtonItem *aboutButton; + @end diff --git a/Espagram/EspagramMainTableViewController.m b/Espagram/EspagramMainTableViewController.m index 219f00a..e0d3e55 100644 --- a/Espagram/EspagramMainTableViewController.m +++ b/Espagram/EspagramMainTableViewController.m @@ -9,6 +9,7 @@ #import "EspagramMainTableViewController.h" #import "SpanishConjugator.h" #import "EspagramTestViewController.h" +#import "EspagramLessonViewController.h" @interface EspagramMainTableViewController () @property (nonatomic, strong) NSString *language, *displayTitle; @@ -20,6 +21,7 @@ @synthesize language = _language; @synthesize tense = _tense; @synthesize displayTitle = _displayTitle; +@synthesize aboutButton = _aboutButton; - (id)initWithStyle:(UITableViewStyle)style { @@ -30,22 +32,13 @@ return self; } -- (void)viewDidLoad +- (void)viewDidAppear:(BOOL)animated { - [super viewDidLoad]; - - // Uncomment the following line to preserve selection between presentations. - // self.clearsSelectionOnViewWillAppear = NO; - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem; + [super viewDidAppear:animated]; + + [self.aboutButton setTitle:NSLocalizedString(@"About button", @"About button text")]; } -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} # pragma mark - Espagram setters and getters @@ -66,18 +59,16 @@ self.tense = [[Tense alloc] init]; self.tense.tense = tense; self.displayTitle = [self.tense getTenseInLanguage:@"Spanish"]; - [self performSegueWithIdentifier:@"Testing" sender:self]; + [self performSegueWithIdentifier:@"Show Lessons" sender:self]; } - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - if ( [segue.identifier isEqualToString:@"Testing"]) { - EspagramTestViewController * dest = segue.destinationViewController; - dest.title = self.displayTitle; - dest.conjugator= [self getLanguage]; - dest.tense =self.tense; + if ( [segue.identifier isEqualToString:@"Show Lessons"]) { + [segue.destinationViewController setConjugator:[self getLanguage]]; + [segue.destinationViewController setTense:self.tense]; } } @@ -124,30 +115,39 @@ } */ + #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString * selectedTense = [tableView cellForRowAtIndexPath:indexPath].textLabel.text; NSLog(@"Selected tense: %@", selectedTense); - - if ( [selectedTense isEqualToString:@"Presente de indicativo"] ) { + + if ( [selectedTense isEqualToString:@"Presente de Indicativo"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"SIMPLE_PRESENT"]; - } else if ( [selectedTense isEqualToString:@"Indefinido"] ) { + } else if ( [selectedTense isEqualToString:@"Presente de Subjuntivo"] ) { + [self testVerbsWithLanguage: @"Spanish" andTense:@"PRESENT_SUBJUNCTIVE"]; + } else if ( [selectedTense isEqualToString:@"Pretérito Indefinido"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"SIMPLE_PAST"]; } else if ( [selectedTense isEqualToString:@"Imperfecto"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"IMPERFECT"]; + } else if ( [selectedTense isEqualToString:@"Imperfecto de Subjuntivo"] ) { + [self testVerbsWithLanguage: @"Spanish" andTense:@"IMPERFECT_SUBJUNCTIVE"]; } else if ( [selectedTense isEqualToString:@"Futuro"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"FUTURE"]; } else if ( [selectedTense isEqualToString:@"Pretérito Perfecto"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"PRESENT_PERFECT"]; + } else if ( [selectedTense isEqualToString:@"Perfecto de Subjuntivo"] ) { + [self testVerbsWithLanguage: @"Spanish" andTense:@"PERFECT_SUBJUNCTIVE"]; } else if ( [selectedTense isEqualToString:@"Pluscuamperfecto"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"PAST_PERFECT"]; + } else if ( [selectedTense isEqualToString:@"Pluscuamperfecto Subjuntivo"] ) { + [self testVerbsWithLanguage: @"Spanish" andTense:@"PAST_PERFECT_SUBJUNCTIVE"]; } else if ( [selectedTense isEqualToString:@"Futuro Perfecto"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"FUTURE_PERFECT"]; } else if ( [selectedTense isEqualToString:@"Condicional"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"CONDITIONAL"]; - } else if ( [selectedTense isEqualToString:@"Condicional Perfect"] ) { + } else if ( [selectedTense isEqualToString:@"Condicional Perfecto"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"CONDITIONAL_PERFECT"]; } else if ( [selectedTense isEqualToString:@"Gerundio"] ) { [self testVerbsWithLanguage: @"Spanish" andTense:@"GERUND"]; diff --git a/Espagram/EspagramNewLessonViewController.h b/Espagram/EspagramNewLessonViewController.h new file mode 100644 index 0000000..b6714f0 --- /dev/null +++ b/Espagram/EspagramNewLessonViewController.h @@ -0,0 +1,34 @@ +// +// EspagramNewLessonViewController.h +// Espagram +// +// Created by Abel Fokkinga on 11/13/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import + +@class EspagramConjugationTableViewController; + +@protocol EspagramNewLessonDelegate +- (void) addLesson:(NSString*)title withDescription:(NSString*) subTitle; +- (void) cancelLesson; +@end + +@interface EspagramNewLessonViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UILabel *nameLabel; + +@property (weak, nonatomic) IBOutlet UILabel *descriptionLabel; + +@property (weak, nonatomic) IBOutlet UIButton *addButton; + +@property (weak, nonatomic) IBOutlet UIButton *cancelButton; + +@property (weak, nonatomic) IBOutlet UITextField *lessonNameTextInput; + +@property (weak, nonatomic) IBOutlet UITextField *lessonDescriptionTextInput; + +@property (nonatomic,strong) id dataSource; + +@end diff --git a/Espagram/EspagramNewLessonViewController.m b/Espagram/EspagramNewLessonViewController.m new file mode 100644 index 0000000..59c9148 --- /dev/null +++ b/Espagram/EspagramNewLessonViewController.m @@ -0,0 +1,70 @@ +// +// EspagramNewLessonViewController.m +// Espagram +// +// Created by Abel Fokkinga on 11/13/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "EspagramNewLessonViewController.h" + +@interface EspagramNewLessonViewController () + +@end + +@implementation EspagramNewLessonViewController + +@synthesize nameLabel = _nameLabel; +@synthesize descriptionLabel = _descriptionLabel; +@synthesize addButton = _addButton; +@synthesize lessonDescriptionTextInput = _lessonDescriptionTextInput; +@synthesize lessonNameTextInput = _lessonNameTextInput; +@synthesize dataSource = _dataSource; + +- (IBAction)editingDidEnd:(id)sender { + [self resignFirstResponder]; +} + +- (IBAction)addButtonPressed { + NSLog(@"Add button pressed with %@", self.lessonNameTextInput.text); + [self.dataSource addLesson:self.lessonNameTextInput.text withDescription:self.lessonDescriptionTextInput.text]; +} + +- (IBAction)cancelButtonPressed:(id)sender { + if ( !self.dataSource ) { + NSLog(@"dataSource is not set"); + } + NSLog(@"Cancel button pressed"); + [self.dataSource cancelLesson]; +} + + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + self.nameLabel.text = NSLocalizedString(@"Lesson title", @"Lesson title when adding a new lesson"); + self.descriptionLabel.text = NSLocalizedString(@"Description", @"Lesson description when adding a new lesson"); + + [self.addButton setTitle:NSLocalizedString(@"Add Lesson","Add button for adding a new lesson") forState:UIControlStateNormal]; + + [self.cancelButton setTitle:NSLocalizedString(@"Cancel Lesson","Cancel button when adding a new lesson") forState:UIControlStateNormal]; + +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/Espagram/EspagramTestViewController.h b/Espagram/EspagramTestViewController.h index 4447f92..0b046fb 100644 --- a/Espagram/EspagramTestViewController.h +++ b/Espagram/EspagramTestViewController.h @@ -9,9 +9,29 @@ #import #import "Conjugator.h" #import "EspagramConjugationTableViewController.h" +#import "Lesson+Conjugator.h" +#import "Lesson+Test.h" +#import "Verb.h" -@interface EspagramTestViewController : UIViewController +@interface EspagramTestViewController : UIViewController -@property (weak, nonatomic) IBOutlet UITextField *verbInput; +@property (weak, nonatomic) IBOutlet UILabel *testedVerbLabel; + +@property (weak, nonatomic) IBOutlet UILabel *verbMeaningLable; + +@property (weak, nonatomic) IBOutlet UILabel *verbPersonLabel; + +@property (weak, nonatomic) IBOutlet UIButton *answer1Button; + +@property (weak, nonatomic) IBOutlet UIButton *answer2Button; + +@property (weak, nonatomic) IBOutlet UIButton *answer3Button; + +@property (weak, nonatomic) IBOutlet UIButton *answer4Button; + +@property (weak, nonatomic) IBOutlet UIButton *nextButton; + + +@property (strong, nonatomic) Lesson *lesson; @end diff --git a/Espagram/EspagramTestViewController.m b/Espagram/EspagramTestViewController.m index aeb7745..0c2b62b 100644 --- a/Espagram/EspagramTestViewController.m +++ b/Espagram/EspagramTestViewController.m @@ -7,55 +7,191 @@ // #import "EspagramTestViewController.h" +#import "NSMutableArray_Shuffling.h" @interface EspagramTestViewController () +@property (nonatomic, strong) NSMutableArray * testSet; +@property (nonatomic, strong) TestableVerb * currentVerb; +@property (nonatomic) int correctAnswersInCurrentSet; +@property (nonatomic) int wrongAnswersInCurrentSet; + @end @implementation EspagramTestViewController -@synthesize conjugator = _conjugator; -@synthesize tense = _tense; -@synthesize verb = _verb; -@synthesize verbInput; +@synthesize lesson = _lesson; +@synthesize testedVerbLabel = _testedVerbLabel; +@synthesize verbMeaningLable = _testedVerbLable; +@synthesize verbPersonLabel = _verbPersonLabel; +@synthesize answer1Button = _answer1Button; +@synthesize answer2Button = _answer2Button; +@synthesize answer3Button = _answer3Button; +@synthesize answer4Button = _answer4Button; +@synthesize nextButton = _nextButton; +@synthesize testSet = _testSet; +@synthesize currentVerb = _currentVerb; +@synthesize correctAnswersInCurrentSet = _correctAnswersInCurrentSet; +@synthesize wrongAnswersInCurrentSet = _wrongAnswersInCurrentSet; + + +- (NSMutableArray *)testSet{ + // Check if there are any verbs in the set + if ( _testSet.count == 0) { + _testSet = [self.lesson testableVerbs]; + self.correctAnswersInCurrentSet = 0; + self.wrongAnswersInCurrentSet = 0; + } + return _testSet; +}; -- (NSString *) verb { - if ( self.verbInput.text) - _verb = self.verbInput.text; - return _verb; -} - (IBAction)EditingDidEnd:(UITextField *)sender { [self resignFirstResponder]; } -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} -- (void)viewDidLoad -{ - [super viewDidLoad]; - // Do any additional setup after loading the view. -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - - -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { +- (IBAction)answered:(UIButton *)sender { - if ( [segue.identifier isEqualToString:@"Conjugate"]) { - [segue.destinationViewController setDataSource:self]; - [segue.destinationViewController setTitle:[self.tense getTenseInLanguage:[self.conjugator description]]]; + NSString * correctAnswer = [self.lesson.getConjugationEngine conjugateVerb:self.currentVerb.verb.verb inPerson:self.currentVerb.person andTense:[self.lesson getTenseAsTense]]; + + + if ( [sender.titleLabel.text isEqualToString:correctAnswer]) { + + [self setUILabelTitle:self.verbPersonLabel withText:[[[[[[self.lesson getConjugationEngine] persons] objectForKey:self.currentVerb.person] stringByAppendingString:@" "] stringByAppendingString:correctAnswer] stringByAppendingString:@" \u2705"] inColour:[UIColor greenColor] andSize:16]; + + } else { + [self setUILabelTitle:self.verbPersonLabel withText:[[[[[[self.lesson getConjugationEngine] persons] objectForKey:self.currentVerb.person] stringByAppendingString:@" "] stringByAppendingString:sender.titleLabel.text] stringByAppendingString:@" \u274C"] inColour:[UIColor redColor] andSize:16]; + + // Set current test verb to failed + self.currentVerb.failed = true; } } +- (id) popLastFromArray:(NSMutableArray *)a +{ + id lastObject = nil; + if ( a && a.count > 0 ) { + lastObject = [a lastObject]; + NSLog(@"Popping: %@", lastObject); + [a removeLastObject]; + } + return lastObject; +} + +- (IBAction)nextButtonPressed:(id)sender { + + [self.testSet removeLastObject]; + + [self nextVerb]; +} + +- (void)setAnswerButton:(UIButton *)button withAnswer:(NSString *)answer andCorrect:(NSString *)correct +{ + + [self setUIButtonTitle:button withText:answer inColour:[UIColor blackColor] forState:UIControlStateNormal]; + + if ( [answer isEqualToString:correct]) + [self setUIButtonTitle:button withText:answer inColour:[UIColor greenColor] forState:UIControlStateHighlighted]; + else + [self setUIButtonTitle:button withText:answer inColour:[UIColor greenColor] forState:UIControlStateHighlighted]; +} + +- (void) setUIButtonTitle:(UIButton *)button withText:(NSString *) titleString inColour:(UIColor *) colour forState:(UIControlState)controlState +{ + NSAttributedString *title; + title = [[NSAttributedString alloc] initWithString:titleString attributes:@{ NSFontAttributeName : + [UIFont fontWithName:@"Noteworthy-Bold" size:16], + // NSUnderlineStyleAttributeName : @1, + NSStrokeColorAttributeName : colour}]; + + [button setAttributedTitle:title forState:controlState]; + +} + +- (void) setUILabelTitle:(UILabel *)label withText:(NSString *) titleString inColour:(UIColor *) colour andSize:(int) fontSize; +{ + NSAttributedString *title; + title = [[NSAttributedString alloc] initWithString:titleString attributes:@{ NSFontAttributeName : + [UIFont fontWithName:@"Noteworthy-Bold" size:fontSize], + // NSUnderlineStyleAttributeName : @1, + NSStrokeColorAttributeName : colour + }]; + + label.attributedText = title; +} + + +- (void) nextVerb { + NSMutableArray * answers; + + if ( self.currentVerb && self.currentVerb.failed) { + // Last test failed.. so we won't remove it + // instead we shuffle the test set. + [self.testSet shuffle]; + + // increase wrongly answered counter + self.wrongAnswersInCurrentSet += 1; + } { + // Last verb answered correctly + [self.testSet lastObject]; + + // increase wrongly answered counter + self.correctAnswersInCurrentSet += 1; + } + + self.currentVerb = self.testSet.lastObject; + + + if ( self.currentVerb) { + + NSLog(@"Testing verb %@ in %@", self.currentVerb.verb.verb, self.currentVerb.person); + + NSString * correctAnswer = [self.lesson.getConjugationEngine conjugateVerb:self.currentVerb.verb.verb inPerson:self.currentVerb.person andTense:[self.lesson getTenseAsTense]]; + + NSLog(@"Correct answer: %@", correctAnswer); + + // Set display label to verb to test + [self setUILabelTitle:self.testedVerbLabel withText:self.currentVerb.verb.verb inColour:[UIColor blackColor] andSize:30]; + + [self setUILabelTitle:self.verbMeaningLable withText:self.currentVerb.verb.meaning inColour:[UIColor blackColor] andSize:12]; + + [self setUILabelTitle:self.verbPersonLabel withText:[[[self.lesson getConjugationEngine] persons] objectForKey:self.currentVerb.person] inColour:[UIColor blackColor] andSize:16]; + + + // Get the shuffles answers; + answers = [self.lesson.getConjugationEngine getTestConjugationsForVerb:self.currentVerb.verb.verb inPerson:self.currentVerb.person andTense:[self.lesson getTenseAsTense]]; + + + [self setAnswerButton:self.answer1Button withAnswer:[self popLastFromArray:answers] andCorrect:correctAnswer]; + + [self setAnswerButton:self.answer2Button withAnswer:[self popLastFromArray:answers] andCorrect:correctAnswer]; + + [self setAnswerButton:self.answer3Button withAnswer:[self popLastFromArray:answers] andCorrect:correctAnswer]; + + [self setAnswerButton:self.answer4Button withAnswer:[self popLastFromArray:answers] andCorrect:correctAnswer]; + + } else { + NSLog(@"Que horror, no lesson!"); + } + +} + + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + self.nextButton.titleLabel.text = NSLocalizedString(@"Next", @"Next button in the testing screen to continue to the next verb"); + + [self.nextButton setTitle:NSLocalizedString(@"Next", @"Next button in the testing screen to continue to the next verb") forState:UIControlStateNormal]; + + self.title = [self.lesson getTenseName]; + + if ( [self.testSet count] > 0) { + [self nextVerb]; + } +} + + + @end diff --git a/Espagram/EspagramWordsInLessonViewController.h b/Espagram/EspagramWordsInLessonViewController.h new file mode 100644 index 0000000..efd245c --- /dev/null +++ b/Espagram/EspagramWordsInLessonViewController.h @@ -0,0 +1,19 @@ +// +// EspagramWordsInLessonViewController.h +// Espagram +// +// Created by Abel Fokkinga on 11/14/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import +#import "CoreDataTableViewController.h" +#import "EspagramAddWordToLessonViewController.h" +#import "EspagramConjugationTableViewController.h" +#import "Lesson.h" + +@interface EspagramWordsInLessonViewController : CoreDataTableViewController ; + +@property (nonatomic, strong) Lesson * lesson; + +@end diff --git a/Espagram/EspagramWordsInLessonViewController.m b/Espagram/EspagramWordsInLessonViewController.m new file mode 100644 index 0000000..791a489 --- /dev/null +++ b/Espagram/EspagramWordsInLessonViewController.m @@ -0,0 +1,140 @@ +// +// EspagramWordsInLessonViewController.m +// Espagram +// +// Created by Abel Fokkinga on 11/14/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "EspagramWordsInLessonViewController.h" +#import "Conjugator.h" +#import "Verb+Create.h" + +@interface EspagramWordsInLessonViewController () +@end + +@implementation EspagramWordsInLessonViewController + +@synthesize lesson = _lesson; + + +- (IBAction)AddButtonPressed:(id)sender { + [self performSegueWithIdentifier:@"Add A Word To Lesson" sender:self]; +} + +- (void) addWord:(NSString *)word withMeaning:(NSString *)meaning{ + if ( word ) { + [Verb addVerb:word andMeaning:meaning toLesson:self.lesson]; + } + [[self parentViewController] dismissViewControllerAnimated:TRUE completion:^{ + NSLog(@"Word added"); + }]; +} + +- (void) cancelAddingWord{ + [[self parentViewController] dismissViewControllerAnimated:TRUE completion:^{ NSLog(@"Adding a word cancelled"); + }]; +} + +- (void)setupFetchedResultsController // attaches an NSFetchRequest to this UITableViewController +{ + NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Verb"]; + request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"verb" + ascending:YES + selector:@selector(localizedCompare:)]]; + + request.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[NSPredicate predicateWithFormat:@"lesson.title = %@", self.lesson.title], [NSPredicate predicateWithFormat:@"lesson.tense = %@", self.lesson.tense], [NSPredicate predicateWithFormat:@"lesson.conjugator = %@", self.lesson.conjugator],nil]]; + + + self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request + managedObjectContext:self.lesson.managedObjectContext + sectionNameKeyPath:nil + cacheName:nil]; +} + + +- (void)setLesson:(Lesson *)lesson +{ + _lesson = lesson; + self.title = lesson.title; + [self setupFetchedResultsController]; +} + + + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Word Cell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; + + // Configure the cell... + Verb * verb = [self.fetchedResultsController objectAtIndexPath:indexPath]; + cell.textLabel.text = verb.verb; + cell.detailTextLabel.text = verb.meaning; + + return cell; +} + + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender +{ + if ( [segue.identifier isEqualToString:@"Add A Word To Lesson"]) { + [segue.destinationViewController setDataSource:self]; + } + + if ( [segue.identifier isEqualToString:@"Conjugate"]) { + Verb * selectedVerb = [self.fetchedResultsController objectAtIndexPath:sender]; + [segue.destinationViewController setVerb:selectedVerb]; + } +} + + +// Override to support conditional editing of the table view. +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath +{ + // Return NO if you do not want the specified item to be editable. + return YES; +} + + + +// Override to support editing the table view. +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (editingStyle == UITableViewCellEditingStyleDelete) { + // Delete the row from the data source + //[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; + Verb * selectedVerb = [self.fetchedResultsController objectAtIndexPath:indexPath]; + [self.lesson removeVerbsObject:selectedVerb]; + } + // else if (editingStyle == UITableViewCellEditingStyleInsert) { + // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view + // } +} + + +/* +// Override to support rearranging the table view. +- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath +{ +} +*/ + +/* +// Override to support conditional rearranging of the table view. +- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath +{ + // Return NO if you do not want the item to be re-orderable. + return YES; +} +*/ + +#pragma mark - Table view delegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [self performSegueWithIdentifier:@"Conjugate" sender:indexPath]; +} + +@end diff --git a/Espagram/GrammarTestViewController.h b/Espagram/GrammarTestViewController.h deleted file mode 100644 index 1319009..0000000 --- a/Espagram/GrammarTestViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// GrammarTestViewController.h -// Espagram -// -// Created by Abel Fokkinga on 10/15/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import -#import "Conjugator.h" -#import "EspagramConjugationTableViewController.h" - -@class GrammarTestViewController; - -@interface GrammarTestViewController : UIViewController - -@property (weak, nonatomic) UITextField *verbInput; - -@property (weak, nonatomic) IBOutlet UIView *conjugatedVerbTable; - -@end diff --git a/Espagram/GrammarTestViewController.m b/Espagram/GrammarTestViewController.m deleted file mode 100644 index d1441a9..0000000 --- a/Espagram/GrammarTestViewController.m +++ /dev/null @@ -1,69 +0,0 @@ -// -// GrammarTestViewController.m -// Espagram -// -// Created by Abel Fokkinga on 10/15/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "GrammarTestViewController.h" - - -@implementation GrammarTestViewController - -@synthesize conjugator = _conjugator; -@synthesize verbInput = _verbInput; -@synthesize tense = _tense; -@synthesize verb = _verb; -@synthesize conjugatedVerbTable = _conjugatedVerbTable; - - -- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil -{ - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - // Custom initialization - } - return self; -} - -- (IBAction)verbEntered:(id)sender { - self.verb = self.verbInput.text; - [self.view resignFirstResponder]; -} - -- (void) verb:(NSString *) verb { - _verb = verb; - if ( ! [_verb isEqualToString:self.verbInput.text]) - self.verbInput.text = _verb; -} - -- (void) setup{ - NSLog([self.conjugator description]); - NSLog(@"Persons %d", [[[self conjugator] persons] count]); -} - -- (void) awakeFromNib -{ - [self setup]; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - // Do any additional setup after loading the view. - - [self setup]; -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} -; -- (void)viewDidUnload { - [self setVerbInput:nil]; - [super viewDidUnload]; -} -@end diff --git a/Espagram/Lesson+Conjugator.h b/Espagram/Lesson+Conjugator.h new file mode 100644 index 0000000..701c163 --- /dev/null +++ b/Espagram/Lesson+Conjugator.h @@ -0,0 +1,21 @@ +// +// Lesson+Conjugator.h +// Espagram +// +// Created by Abel Fokkinga on 11/14/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Lesson.h" +#import "Conjugator.h" +#import "tense.h" + +@interface Lesson (Conjugator) + +- (id )getConjugationEngine; + +- (Tense *) getTenseAsTense; + +- (NSString *) getTenseName; + +@end diff --git a/Espagram/Lesson+Conjugator.m b/Espagram/Lesson+Conjugator.m new file mode 100644 index 0000000..f3ff008 --- /dev/null +++ b/Espagram/Lesson+Conjugator.m @@ -0,0 +1,37 @@ +// +// Lesson+Conjugator.m +// Espagram +// +// Created by Abel Fokkinga on 11/14/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Lesson+Conjugator.h" +#import "SpanishConjugator.h" + +@implementation Lesson (Conjugator) + + +- (id ) getConjugationEngine +{ + if ( [self.conjugator isEqualToString:@"Spanish"] ) + return [[SpanishConjugator alloc] init]; + else + return nil; +} + +- (Tense *) getTenseAsTense +{ + Tense * tense = [[Tense alloc] init]; + tense.tense = self.tense; + return tense; +} + +- (NSString *) getTenseName +{ + Tense * tense = [[Tense alloc] init]; + tense.tense = self.tense; + return [tense getTenseInLanguage:self.conjugator]; +} + +@end diff --git a/Espagram/Lesson+Create.h b/Espagram/Lesson+Create.h new file mode 100644 index 0000000..6726467 --- /dev/null +++ b/Espagram/Lesson+Create.h @@ -0,0 +1,18 @@ +// +// Lesson+Create.h +// Palabel +// +// Created by Abel Fokkinga on 1/29/12. +// Copyright (c) 2012 T-consult International vof. All rights reserved. +// + +#import "Lesson.h" +#import "Tense.h" +#import "Conjugator.h" + +@interface Lesson (Create) + ++ (void) addLessonWithTitle:(NSString *) title andSubTitle:(NSString *)subTitle +inTense:(Tense *)tense conjugatedBy:(id ) conjugator inManagedObjectContext:(NSManagedObjectContext *) context; + +@end diff --git a/Espagram/Lesson+Create.m b/Espagram/Lesson+Create.m new file mode 100644 index 0000000..85fa446 --- /dev/null +++ b/Espagram/Lesson+Create.m @@ -0,0 +1,50 @@ +// +// Lesson+Create.m +// Palabel +// +// Created by Abel Fokkinga on 1/29/12. +// Copyright (c) 2012 T-consult International vof. All rights reserved. +// + +#import "Lesson+Create.h" + +@implementation Lesson (Create) + ++ (void) addLessonWithTitle:(NSString *) title andSubTitle:(NSString *)subTitle + inTense:(Tense *)tense conjugatedBy:(id ) conjugator inManagedObjectContext:(NSManagedObjectContext *) context + +{ + Lesson *lesson = nil; + // Check if a lesson with this name already exists for this tense + + NSLog(@"Adding Lesson %@ for tense %@ in %@ at context %@", title, tense.tense, [conjugator description], context); + + NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Lesson"]; + + // Where clause + request.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[NSPredicate predicateWithFormat:@"title = %@", title],[NSPredicate predicateWithFormat:@"tense = %@", tense.tense], [NSPredicate predicateWithFormat:@"conjugator = %@", [conjugator description]],nil]]; + + // Order by + //request.sortDescriptors = [NSSortDescriptor sortDescriptorWithKey:@"dateAdded" ascending:YES]; + + + NSError *error = nil; + NSArray *lessons = [context executeFetchRequest:request error:&error]; + + if ( error || [lessons count] > 0) { + NSLog(@"Could not add lesson: %@", error.description); + } else { + NSLog(@"Inserting new lesson in context %@", context); + lesson = [NSEntityDescription insertNewObjectForEntityForName:@"Lesson" inManagedObjectContext:context]; + lesson.title = title; + lesson.subTitle = subTitle; + lesson.tense = tense.tense; + lesson.conjugator = [conjugator description]; + lesson.dateAdded = [[NSDate alloc] initWithTimeIntervalSinceNow:0]; + + NSLog(@"Saving context"); + [context save:&error]; + } +} + +@end diff --git a/Espagram/Lesson+Test.h b/Espagram/Lesson+Test.h new file mode 100644 index 0000000..d67af52 --- /dev/null +++ b/Espagram/Lesson+Test.h @@ -0,0 +1,18 @@ +// +// Lesson+Test.h +// Espagram +// +// Created by Abel Fokkinga on 11/15/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Lesson.h" +#import "TestableVerb.h" + + +@interface Lesson (Test) + +// Returns TestableVerbs +- (NSMutableArray *) testableVerbs; + +@end diff --git a/Espagram/Lesson+Test.m b/Espagram/Lesson+Test.m new file mode 100644 index 0000000..64ef525 --- /dev/null +++ b/Espagram/Lesson+Test.m @@ -0,0 +1,33 @@ +// +// Lesson+Test.m +// Espagram +// +// Created by Abel Fokkinga on 11/15/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Lesson+Conjugator.h" +#import "Lesson+Test.h" +#import "Conjugator.h" +#import "NSMutableArray_Shuffling.h" + +@implementation Lesson (Test) + +- (NSArray *) testableVerbs; +{ + NSMutableArray *testableVerbs = [[NSMutableArray alloc] init]; + for ( NSString *person in [[self getConjugationEngine] personsKeys]) { + for ( Verb *verb in self.verbs.allObjects) { + TestableVerb * testableVerb = [[TestableVerb alloc] init]; + testableVerb.verb = verb; + testableVerb.person = person; + [testableVerbs addObject:testableVerb]; + } + } + // shuffle list + [testableVerbs shuffle]; + + return testableVerbs; +} + +@end diff --git a/Espagram/Lesson.h b/Espagram/Lesson.h new file mode 100644 index 0000000..21bc105 --- /dev/null +++ b/Espagram/Lesson.h @@ -0,0 +1,31 @@ +// +// Lesson.h +// Espagram +// +// Created by Abel Fokkinga on 11/13/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import +#import + +@class Verb; + +@interface Lesson : NSManagedObject + +@property (nonatomic, retain) NSDate * dateAdded; +@property (nonatomic, retain) NSString * subTitle; +@property (nonatomic, retain) NSString * tense; +@property (nonatomic, retain) NSString * title; +@property (nonatomic, retain) NSString * conjugator; +@property (nonatomic, retain) NSSet *verbs; +@end + +@interface Lesson (CoreDataGeneratedAccessors) + +- (void)addVerbsObject:(Verb *)value; +- (void)removeVerbsObject:(Verb *)value; +- (void)addVerbs:(NSSet *)values; +- (void)removeVerbs:(NSSet *)values; + +@end diff --git a/Espagram/Lesson.m b/Espagram/Lesson.m new file mode 100644 index 0000000..1257698 --- /dev/null +++ b/Espagram/Lesson.m @@ -0,0 +1,22 @@ +// +// Lesson.m +// Espagram +// +// Created by Abel Fokkinga on 11/13/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Lesson.h" +#import "Verb.h" + + +@implementation Lesson + +@dynamic dateAdded; +@dynamic subTitle; +@dynamic tense; +@dynamic title; +@dynamic conjugator; +@dynamic verbs; + +@end diff --git a/Espagram/Persons.h b/Espagram/Persons.h deleted file mode 100644 index d2bd931..0000000 --- a/Espagram/Persons.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Persons.h -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import -#import - - -@interface Persons : NSManagedObject - -@property (nonatomic, retain) NSString * language; -@property (nonatomic, retain) NSString * person; -@property (nonatomic, retain) NSString * translation; - -@end diff --git a/Espagram/Persons.m b/Espagram/Persons.m deleted file mode 100644 index 154e029..0000000 --- a/Espagram/Persons.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// Persons.m -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "Persons.h" - - -@implementation Persons - -@dynamic language; -@dynamic person; -@dynamic translation; - -@end diff --git a/Espagram/SpanishConjugator.h b/Espagram/SpanishConjugator.h index cc828d7..9844eeb 100644 --- a/Espagram/SpanishConjugator.h +++ b/Espagram/SpanishConjugator.h @@ -12,5 +12,4 @@ @interface SpanishConjugator : NSObject - @end diff --git a/Espagram/SpanishConjugator.m b/Espagram/SpanishConjugator.m index 8cc89bc..5ef171b 100644 --- a/Espagram/SpanishConjugator.m +++ b/Espagram/SpanishConjugator.m @@ -7,6 +7,7 @@ // #import "SpanishConjugator.h" +#import "NSMutableArray_Shuffling.h" @interface SpanishConjugator() @@ -15,15 +16,19 @@ *simplePresentEtoIstemChangersArray; @property (nonatomic,strong) NSDictionary *persons; +@property (nonatomic,strong) NSDictionary *reflexivePersons; @end @implementation SpanishConjugator +#pragma mark - variables + @synthesize simplePresentEtoIEstemChangersArray = _simplePresentEtoIEstemChangersArray; @synthesize simplePresentOtoUEstemChangersArray = _simplePresentOtoUEstemChangersArray; @synthesize simplePresentEtoIstemChangersArray = _simplePresentEtoIstemChangersArray; @synthesize persons = _persons; +@synthesize reflexivePersons = _reflexivePersons; - (NSString *) description @@ -44,49 +49,143 @@ return [_persons copy]; } +- (NSDictionary *) reflexivePersons { + if (_reflexivePersons == nil) { + _reflexivePersons = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"me",@"te",@"se",@"nos", @"os", @"se", nil] forKeys:[[NSArray alloc] initWithArray:self.personsKeys]]; + } + return [_reflexivePersons copy]; +} + + - (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]; + _simplePresentEtoIEstemChangersArray = [[NSArray alloc] initWithObjects: + @"acertar", + @"advertir", + @"adtrevesar", + @"calentar", + @"cerrar", + @"comenzar", + @"confesar", + @"consentir", + @"convertir", + @"defender", + @"despertar", + @"divertir", + @"empezar", + @"encender", + @"entender", + @"gobernar", + @"fregar", + @"herir", + @"hervir", + @"mentir", + @"merendar", + @"negar", + @"pensar", + @"perder", + @"preferir", + @"querer", + @"sentir", + @"tropezar", + 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]; + _simplePresentOtoUEstemChangersArray = [[NSArray alloc] initWithObjects: + @"acordar", + @"acostar", + @"almorzar", + @"apostar", + @"aprobar", + @"colgar", + @"contar", + @"costar", + @"devolver", + @"dormir", + @"encontrar", + @"envolver", + @"llover", + @"morder", + @"morir", + @"mostrar", + @"mover", + @"oler", + @"poder", + @"probar", + @"recordar", + @"resolver", + @"rogar", + @"sonar", + @"soñar", + @"tostar", + @"volar", + @"volver", + @"oler" + ,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 + _simplePresentEtoIstemChangersArray = [[NSArray alloc] initWithObjects: + @"colegir", + @"competir", + @"conseguir", + @"corregir", + @"derretir", + @"despedir", + @"elegir", + @"freír", + @"gemir", + @"impedir", + @"medir", + @"pedir", + @"perseguir", + @"repetir", + @"reír", + @"seguir", + @"servir", + @"sonreír", + @"repetir", + @"vestir" + ,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]; - + if ( verb.length > 2 ) + return [verb substringFromIndex:[verb length] - 2]; + else + return @""; } - (NSString *) getStem:(NSString *) verb { NSLog(@"getStem start"); - if ( [[self getExit:verb] isEqualToString:@"ír"] ) - return [[verb substringToIndex:[verb length] -2] stringByAppendingString:@"i"]; + // if ( [[self getExit:verb] isEqualToString:@"ír"] ) + // return [[verb substringToIndex:[verb length] -2] stringByAppendingString:@"i"]; NSLog(@"getStem end"); return [verb substringToIndex:[verb length] -2]; } +# pragma mark - Simple Present + - (NSString *) getSimplePresentStemVerb:(NSString *) verb inPerson:(NSString *) person { NSString * verbStem = [self getStem:verb]; + NSString * verbExit = [self getExit:verb]; NSLog(@"getSimplePresentStemVerb start.irregular"); @@ -100,11 +199,6 @@ 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í"; @@ -125,6 +219,11 @@ if ( [verb rangeOfString:@"venir"].location != NSNotFound) return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"ven"] withString:@"veng"]; + // conducir, conocer etc. + if ( verb.length > 3 && ([[verb substringFromIndex:[verb length] - 3] isEqualToString:@"cer"] || + [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"cir"]) ) + return [[verbStem substringToIndex:[verbStem length] - 1] stringByAppendingString:@"zc"]; + // other if ( [verb isEqualToString:@"ver"] ) return @"ve"; @@ -132,11 +231,11 @@ if ( [verb isEqualToString:@"elegir"] ) return @"elij"; // g -> j - if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"gir"] ) + if ( verb.length > 3 && [[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"] ) + if ( verb.length > 4 && [[verb substringFromIndex:[verb length] - 4] isEqualToString:@"guir"] ) return [[verb substringToIndex:[verb length] - 4] stringByAppendingString:@"g"]; @@ -185,22 +284,25 @@ ) { if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to ie - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"ie"]; + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"]; } if ( [[self simplePresentOtoUEstemChangersArray] containsObject:verb] ) { - // Verb changes stem from e to ie - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o"] withString:@"ue"]; + // Verb changes stem from o to ue + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"]; } if ( [[self simplePresentEtoIstemChangersArray] containsObject:verb] ) { - // Verb changes stem from e to ie - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"i"]; + // Verb changes stem from e to i + if ( [[verbExit substringToIndex:verbExit.length-1] isEqualToString:@"í"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"í"]; + else + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"]; } // u -> ue if ( [verb isEqualToString:@"jugar"]) return @"jueg"; // huir, construir - if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"uir"] && + if ( verb.length > 3 && [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"uir"] && ![[verb substringFromIndex:[verb length] - 3] isEqualToString:@"guir"]) return [[verb substringToIndex:[verb length] - 3] stringByAppendingString:@"uy"]; } @@ -263,6 +365,7 @@ if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"amos"]; if ( [@"er" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"emos"]; + if ( [@"ír" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"ímos"]; if ( [@"ir" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"imos"]; } if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"]) { @@ -273,6 +376,7 @@ if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"áis"]; if ( [@"er" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"éis"]; + if ( [@"ír" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"ís"]; if ( [@"ir" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"ís"]; } if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { @@ -290,6 +394,437 @@ } +# pragma mark - Present subjuntivo +- (NSString *) conjugatePresentSubjunctiveVerb:(NSString *) verb inPerson:(NSString *) person { + + NSString * verbStem = [self getStem:verb]; + NSString * verbExit = [self getExit:verb]; + NSString * simplePresentYo = [self conjugateSimplePresentVerb:verb inPerson:@"FIRST_PERSON_SINGULAR"]; + NSString * simplePresentYoStem = [simplePresentYo substringToIndex:simplePresentYo.length -1]; + + + if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"] || + [person isEqualToString:@"THIRD_PERSON_SINGULAR"] ) { + + // 1. If the first person singular does not end in an -o, the verb is irregular in the present subjunctive + if ( [verb isEqualToString:@"ser"]) + return @"sea"; + if ( [verb isEqualToString:@"estar"]) + return @"esté"; + if ( [verb isEqualToString:@"ir"]) + return @"vaya"; + if ( [verb isEqualToString:@"dar"]) + return @"dé"; + if ( [verb isEqualToString:@"saber"]) + return @"sepa"; + if ( [verb isEqualToString:@"haber"]) + return @"haya"; + + // 2. If the stem of the yo form is exactly the same as the stem of the infinitive, the verb is regular + + // Orthographic changes + if ( simplePresentYoStem.length > 2 && + [[simplePresentYoStem substringFromIndex:simplePresentYoStem.length - 2] isEqualToString:@"go"] ) + return [[simplePresentYoStem substringToIndex:simplePresentYoStem.length - 1] stringByAppendingString:@"a"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"car"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"que"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"gue"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"zar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"ce"]; + if ( verb.length > 4 && + [[verb substringFromIndex:verb.length - 4] isEqualToString:@"guir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"gu" options:NSBackwardsSearch] withString:@"ga"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"g" options:NSBackwardsSearch] withString:@"ja"]; + + + if ( [verbStem isEqualToString:simplePresentYoStem]) { + if ( [verbExit isEqualToString:@"ar"] ) + return [verbStem stringByAppendingString:@"e"]; + else + return [verbStem stringByAppendingString:@"a"]; + } + + // 3. If the stem of the yo form shows a stem change when compared to the stem of the infinitive, + // and it's an -ar or -er verb,the stem will undergo the same changes as the present indicative + if ( ![verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] || + [[self simplePresentOtoUEstemChangersArray] containsObject:verb] || + [[self simplePresentEtoIstemChangersArray] containsObject:verb] || + [verb isEqualToString:@"jugar"] ) { + + if ( [verb isEqualToString:@"jugar"] ) return @"juegue"; + + if ( [verbExit isEqualToString:@"ar"] ) + return [simplePresentYoStem stringByAppendingString:@"e"]; + else + return [simplePresentYoStem stringByAppendingString:@"a"]; + } + } + + // 4. if the stem of the yo form when compared to infinitie shows it's an -ir stem changing verb, all + // forms of the present subjunctive will have stem changes + if ( [verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] || + [[self simplePresentOtoUEstemChangersArray] containsObject:verb] || + [[self simplePresentEtoIstemChangersArray] containsObject:verb] ) { + + return [simplePresentYoStem stringByAppendingString:@"a"]; + } + } + + // 5. Changing stem in yo form and not a stem changing verb,: use this stem for all forms of + // present subjuntive + + if ( [verbExit isEqualToString:@"ar"] ) + return [simplePresentYoStem stringByAppendingString:@"e"]; + else + return [simplePresentYoStem stringByAppendingString:@"a"]; + + } else if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"]) { + + // 1. If the first person singular does not end in an -o, the verb is irregular in the present subjunctive + if ( [verb isEqualToString:@"ser"]) + return @"seas"; + if ( [verb isEqualToString:@"estar"]) + return @"estés"; + if ( [verb isEqualToString:@"ir"]) + return @"vayas"; + if ( [verb isEqualToString:@"dar"]) + return @"des"; + if ( [verb isEqualToString:@"saber"]) + return @"sepas"; + if ( [verb isEqualToString:@"haber"]) + return @"hayas"; + + // 2. If the stem of the yo form is exactly the same as the stem of the infinitive, the verb is regular + + // Orthographic changes + if ( simplePresentYoStem.length > 2 && + [[simplePresentYoStem substringFromIndex:simplePresentYoStem.length - 2] isEqualToString:@"go"] ) + return [[simplePresentYoStem substringToIndex:simplePresentYoStem.length - 1] stringByAppendingString:@"as"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"car"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"ques"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"gues"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"zar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"ces"]; + if ( verb.length > 4 && + [[verb substringFromIndex:verb.length - 4] isEqualToString:@"guir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"gu" options:NSBackwardsSearch] withString:@"gas"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"g" options:NSBackwardsSearch] withString:@"jas"]; + + + if ( [verbStem isEqualToString:simplePresentYoStem]) { + if ( [verbExit isEqualToString:@"ar"] ) + return [verbStem stringByAppendingString:@"es"]; + else + return [verbStem stringByAppendingString:@"as"]; + } + + // 3. If the stem of the yo form shows a stem change when compared to the stem of the infinitive, + // and it's an -ar or -er verb,the stem will undergo the same changes as the present indicative + if ( ![verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] || + [[self simplePresentOtoUEstemChangersArray] containsObject:verb] || + [[self simplePresentEtoIstemChangersArray] containsObject:verb] || + [verb isEqualToString:@"jugar"] ) { + + if ( [verb isEqualToString:@"jugar"] ) return @"juegues"; + + if ( [verbExit isEqualToString:@"ar"] ) + return [simplePresentYoStem stringByAppendingString:@"es"]; + else + return [simplePresentYoStem stringByAppendingString:@"as"]; + } + } + + // 4. if the stem of the yo form when compared to infinitie shows it's an -ir stem changing verb, all + // forms of the present subjunctive will have stem changes and special changes in nosotros and vosotros + if ( [verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] || + [[self simplePresentOtoUEstemChangersArray] containsObject:verb] || + [[self simplePresentEtoIstemChangersArray] containsObject:verb] ) { + + return [simplePresentYoStem stringByAppendingString:@"as"]; + } + } + + // 5. Changing stem in yo form and not a stem changing verb,: use this stem for all forms of + // present subjuntive + if ( [verbExit isEqualToString:@"ar"] ) + return [simplePresentYoStem stringByAppendingString:@"es"]; + else + return [simplePresentYoStem stringByAppendingString:@"as"]; + + } else if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { + + // 1. If the first person singular does not end in an -o, the verb is irregular in the present subjunctive + if ( [verb isEqualToString:@"ser"]) + return @"seamos"; + if ( [verb isEqualToString:@"estar"]) + return @"estemos"; + if ( [verb isEqualToString:@"ir"]) + return @"vayamos"; + if ( [verb isEqualToString:@"dar"]) + return @"demos"; + if ( [verb isEqualToString:@"saber"]) + return @"sepamos"; + if ( [verb isEqualToString:@"haber"]) + return @"hayamos"; + + // 2. If the stem of the yo form is exactly the same as the stem of the infinitive, the verb is regular + // Orthographic changes + if ( simplePresentYoStem.length > 2 && + [[simplePresentYoStem substringFromIndex:simplePresentYoStem.length - 2] isEqualToString:@"go"] ) + return [[simplePresentYoStem substringToIndex:simplePresentYoStem.length - 1] stringByAppendingString:@"gamos"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"car"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"quemos"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"guemos"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"zar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"cemos"]; + if ( verb.length > 4 && + [[verb substringFromIndex:verb.length - 4] isEqualToString:@"guir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"gu" options:NSBackwardsSearch] withString:@"gamos"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"g" options:NSBackwardsSearch] withString:@"jamos"]; + + + + if ( [verbStem isEqualToString:simplePresentYoStem]) { + if ( [verbExit isEqualToString:@"ar"] ) + return [verbStem stringByAppendingString:@"emos"]; + else + return [verbStem stringByAppendingString:@"amos"]; + } + + // 3. If the stem of the yo form shows a stem change when compared to the stem of the infinitive, + // and it's an -ar or -er verb,the stem will undergo the same changes as the present indicative + if ( ![verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] || + [[self simplePresentOtoUEstemChangersArray] containsObject:verb] || + [[self simplePresentEtoIstemChangersArray] containsObject:verb] || + [verb isEqualToString:@"jugar"] ) { + + if ( [verb isEqualToString:@"jugar"] ) return @"jueguemos"; + + if ( [verbExit isEqualToString:@"ar"] ) + return [verbStem stringByAppendingString:@"emos"]; + else + return [verbStem stringByAppendingString:@"amos"]; + } + } + + // 4. if the stem of the yo form when compared to infinitie shows it's an -ir stem changing verb, all + // forms of the present subjunctive will have stem changes and special changes in nosotros and vosotros + if ( [verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] ) + return [[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"amos"]; + + if ( [[self simplePresentOtoUEstemChangersArray] containsObject:verb] ) + return [[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"u"] stringByAppendingString:@"amos"]; + } + + // 5. Changing stem in yo form and not a stem changing verb,: use this stem for all forms of + // present subjuntive + if ( [verbExit isEqualToString:@"ar"] ) + return [simplePresentYoStem stringByAppendingString:@"emos"]; + else + return [simplePresentYoStem stringByAppendingString:@"amos"]; + + } else if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"]) { + + // 1. If the first person singular does not end in an -o, the verb is irregular in the present subjunctive + if ( [verb isEqualToString:@"ser"]) + return @"seáis"; + if ( [verb isEqualToString:@"estar"]) + return @"estéis"; + if ( [verb isEqualToString:@"ir"]) + return @"vayáis"; + if ( [verb isEqualToString:@"dar"]) + return @"deis"; + if ( [verb isEqualToString:@"saber"]) + return @"sepáis"; + if ( [verb isEqualToString:@"haber"]) + return @"hayáis"; + + // 2. If the stem of the yo form is exactly the same as the stem of the infinitive, the verb is regular + // Orthographic changes + if ( simplePresentYoStem.length > 2 && + [[simplePresentYoStem substringFromIndex:simplePresentYoStem.length - 2] isEqualToString:@"go"] ) + return [[simplePresentYoStem substringToIndex:simplePresentYoStem.length - 1] stringByAppendingString:@"áis"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"car"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"quéis"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"guéis"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"zar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"céis"]; + if ( verb.length > 4 && + [[verb substringFromIndex:verb.length - 4] isEqualToString:@"guir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"gu" options:NSBackwardsSearch] withString:@"gáis"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"g" options:NSBackwardsSearch] withString:@"jáis"]; + + + + if ( [verbStem isEqualToString:simplePresentYoStem]) { + if ( [verbExit isEqualToString:@"ar"] ) + return [verbStem stringByAppendingString:@"éis"]; + else + return [verbStem stringByAppendingString:@"áis"]; + } + + // 3. If the stem of the yo form shows a stem change when compared to the stem of the infinitive, + // and it's an -ar or -er verb,the stem will undergo the same changes as the present indicative + if ( ![verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] || + [[self simplePresentOtoUEstemChangersArray] containsObject:verb] || + // NOT [[self simplePresentEtoIstemChangersArray] containsObject:verb] || + [verb isEqualToString:@"jugar"] ) { + + if ( [verb isEqualToString:@"jugar"] ) return @"jueguéis"; + + if ( [verbExit isEqualToString:@"ar"] ) + return [verbStem stringByAppendingString:@"éis"]; + else + return [verbStem stringByAppendingString:@"áis"]; + } + } + + // 4. if the stem of the yo form when compared to infinitie shows it's an -ir stem changing verb, all + // forms of the present subjunctive will have stem changes and special changes in nosotros and vosotros + if ( [verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] ) + return [[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"áis"]; + + if ( [[self simplePresentOtoUEstemChangersArray] containsObject:verb] ) + return [[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"u"] stringByAppendingString:@"áis"]; + } + + // 5. Changing stem in yo form and not a stem changing verb,: use this stem for all forms of + // present subjuntive + if ( [verbExit isEqualToString:@"ar"] ) + return [simplePresentYoStem stringByAppendingString:@"éis"]; + else + return [simplePresentYoStem stringByAppendingString:@"áis"]; + + } else if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { + + // 1. If the first person singular does not end in an -o, the verb is irregular in the present subjunctive + if ( [verb isEqualToString:@"ser"]) + return @"sean"; + if ( [verb isEqualToString:@"estar"]) + return @"estén"; + if ( [verb isEqualToString:@"ir"]) + return @"vayan"; + if ( [verb isEqualToString:@"dar"]) + return @"den"; + if ( [verb isEqualToString:@"saber"]) + return @"sepan"; + if ( [verb isEqualToString:@"haber"]) + return @"hayan"; + + // 2. If the stem of the yo form is exactly the same as the stem of the infinitive, the verb is regular + // Orthographic changes + if ( simplePresentYoStem.length > 2 && + [[simplePresentYoStem substringFromIndex:simplePresentYoStem.length - 2] isEqualToString:@"go"] ) + return [[simplePresentYoStem substringToIndex:simplePresentYoStem.length - 1] stringByAppendingString:@"an"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"car"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"quen"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"guen"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"zar"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"c" options:NSBackwardsSearch] withString:@"cen"]; + if ( verb.length > 4 && + [[verb substringFromIndex:verb.length - 4] isEqualToString:@"guir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"gu" options:NSBackwardsSearch] withString:@"gan"]; + if ( verb.length > 3 && + [[verb substringFromIndex:verb.length - 3] isEqualToString:@"gir"] ) + return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"g" options:NSBackwardsSearch] withString:@"jan"]; + + + + if ( [verbStem isEqualToString:simplePresentYoStem]) { + if ( [verbExit isEqualToString:@"ar"] ) + return [verbStem stringByAppendingString:@"en"]; + else + return [verbStem stringByAppendingString:@"an"]; + } + + // 3. If the stem of the yo form shows a stem change when compared to the stem of the infinitive, + // and it's an -ar or -er verb,the stem will undergo the same changes as the present indicative + if ( ![verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] || + [[self simplePresentOtoUEstemChangersArray] containsObject:verb] || + [[self simplePresentEtoIstemChangersArray] containsObject:verb] || + [verb isEqualToString:@"jugar"] ) { + + if ( [verb isEqualToString:@"jugar"] ) return @"jueguen"; + + if ( [verbExit isEqualToString:@"ar"] ) + return [simplePresentYoStem stringByAppendingString:@"en"]; + else + return [simplePresentYoStem stringByAppendingString:@"an"]; + } + } + + // 4. if the stem of the yo form when compared to infinitie shows it's an -ir stem changing verb, all + // forms of the present subjunctive will have stem changes + if ( [verbExit isEqualToString:@"ir"] ) { + + if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] || + [[self simplePresentOtoUEstemChangersArray] containsObject:verb] || + [[self simplePresentEtoIstemChangersArray] containsObject:verb] ) { + + return [simplePresentYoStem stringByAppendingString:@"an"]; + } + } + + // 5. Changing stem in yo form and not a stem changing verb,: use this stem for all forms of + // present subjuntive + if ( [verbExit isEqualToString:@"ar"] ) + return [simplePresentYoStem stringByAppendingString:@"en"]; + else + return [simplePresentYoStem stringByAppendingString:@"an"]; + } + + return verb; +} + + +# pragma mark - Simple Past + - (NSString *) conjugateSimplePastVerb:(NSString *) verb inPerson:(NSString *) person { NSString * verbStem = [self getStem:verb]; @@ -319,14 +854,14 @@ 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.length > 3 && [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"car"] ) + return [[verb substringToIndex:[verb length] - 3] stringByAppendingString:@"qué"]; - if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"gar"] ) - return [[verb substringFromIndex:[verb length] - 3] stringByAppendingString:@"gué"]; + if ( verb.length > 3 && [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"gar"] ) + return [[verb substringToIndex:[verb length] - 3] stringByAppendingString:@"gué"]; - if ( [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"zar"] ) - return [[verb substringFromIndex:[verb length] - 3] stringByAppendingString:@"cé"]; + if ( verb.length > 3 && [[verb substringFromIndex:[verb length] - 3] isEqualToString:@"zar"] ) + return [[verb substringToIndex:[verb length] - 3] stringByAppendingString:@"cé"]; if ( [verbStem isEqualToString:[self getStem:verb]]) { // Regular @@ -334,8 +869,7 @@ else return [verbStem stringByAppendingString:@"í"]; } else { // Irregular - if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"e"]; - else return [verbStem stringByAppendingString:@"i"]; + return [verbStem stringByAppendingString:@"e"]; } } @@ -345,8 +879,14 @@ if ( [verb isEqualToString:@"dar"]) return @"diste"; if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) return @"fuiste"; - if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"aste"]; - else return [verbStem stringByAppendingString:@"iste"]; + if ( [verbStem isEqualToString:[self getStem:verb]]) { + // Regular + if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"aste"]; + else return [verbStem stringByAppendingString:@"iste"]; + } else { + // Irregular + return [verbStem stringByAppendingString:@"iste"]; + } } if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { @@ -354,64 +894,87 @@ if ( [verb isEqualToString:@"dar"]) return @"dio"; if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) return @"fue"; - if ( [[verbStem substringFromIndex:[verbStem length] - 1] isEqualToString:@"e"] || + if ( verb.length > 1 && + ([[verbStem substringFromIndex:[verbStem length] - 1] isEqualToString:@"e"] || [[verbStem substringFromIndex:[verbStem 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] ) { + if ( ![verbStem isEqualToString:[self getStem:verb]]) { // Irregular, stem changed - - if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"o"]; - else return [verbStem stringByAppendingString:@"io"]; + return [verbStem stringByAppendingString:@"o"]; } if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to i - verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"i"]; + verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"]; } if ( [[self simplePresentOtoUEstemChangersArray] containsObject:verb] ) { // Verb changes stem from o to u - verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o"] withString:@"u"]; + verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"u"]; } if ( [[self simplePresentEtoIstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to i - verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"i"]; + verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"]; } - + + // Regular 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ó"]; + else if ( verbStem.length > 1 && [[verbStem substringFromIndex:[verbStem length] - 1] isEqualToString:@"i"]) return [verbStem stringByAppendingString:@"yo"]; + else if ( verbStem.length > 1 && [[verbStem substringFromIndex:[verbStem length] - 1] isEqualToString:@"e"]) return [verbStem stringByAppendingString:@"yo"]; + 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 ( [verbStem isEqualToString:[self getStem:verb]]) { + // Regular + if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"amos"]; + else return [verbStem stringByAppendingString:@"imos"]; + } else { + // Irregular + 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 ( [verbStem isEqualToString:[self getStem:verb]]) { + // Regular + if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"asteis"]; + else return [verbStem stringByAppendingString:@"isteis"]; + } else { + // Irregular + 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:[verbStem length] - 1] isEqualToString:@"j"]) return [verbStem stringByAppendingString:@"eron"]; - else return [verbStem stringByAppendingString:@"ieron"]; + if ( [verbStem isEqualToString:[self getStem:verb]]) { + // Regular + if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"aron"]; + else if ( verbStem.length > 1 && [[verbStem substringFromIndex:[verbStem length] - 1] isEqualToString:@"j"]) return [verbStem stringByAppendingString:@"eron"]; + else if ( verbStem.length > 1 && [[verbStem substringFromIndex:[verbStem length] - 1] isEqualToString:@"i"]) return [verbStem stringByAppendingString:@"yeron"]; + else if ( verbStem.length > 1 && [[verbStem substringFromIndex:[verbStem length] - 1] isEqualToString:@"e"]) return [verbStem stringByAppendingString:@"yeron"]; + else return [verbStem stringByAppendingString:@"ieron"]; + } else { + if ( verbStem.length > 1 && [[verbStem substringFromIndex:[verbStem length] - 1] isEqualToString:@"j"]) return [verbStem stringByAppendingString:@"eron"]; + else return [verbStem stringByAppendingString:@"ieron"]; + } } return verb; } +# pragma mark - Imperfect - (NSString *) conjugateImperfectVerb:(NSString *) verb inPerson:(NSString *) person { @@ -472,6 +1035,44 @@ } + +- (NSString *) conjugateImperfectSubjunctiveVerb:(NSString *) verb inPerson:(NSString *) person { + + NSString * verbExit = [self getExit:verb]; + NSString * verbStem = nil; + NSString * imperfect = [self conjugateSimplePastVerb:verb inPerson:@"THIRD_PERSON_PLURAL"]; + + if ( imperfect.length > 2 ) + verbStem = [imperfect substringToIndex:imperfect.length-2]; + + + // regular + if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { + return [verbStem stringByAppendingString:@"a"]; + } + if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"]) { + return [verbStem stringByAppendingString:@"as"]; } + if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { + return [verbStem stringByAppendingString:@"a"]; } + if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { + if ([[verbStem substringFromIndex:verbStem.length-2] isEqualToString:@"ar"]) + verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"ar" options:NSBackwardsSearch] withString:@"ár"]; + else + verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"er" options:NSBackwardsSearch] withString:@"ér"]; + return [verbStem stringByAppendingString:@"amos"];; + } + if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"]) { + return [verbStem stringByAppendingString:@"ais"]; } + if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { + return [verbStem stringByAppendingString:@"an"]; + } + + return verb; + +} + +# pragma mark - Future / Condicional + // Get stem for Future and Condicional - (NSString *) getFutureStem:(NSString *) verb { @@ -545,31 +1146,35 @@ return verb; } +# pragma mark - Perfect + - (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"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"abrir"] withString:@"abierto"]; if ( [verb rangeOfString:@"cubrir"].location != NSNotFound) - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"cubrir"] withString:@"cubierto"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"cubrir"] withString:@"cubierto"]; if ( [verb rangeOfString:@"decir"].location != NSNotFound) - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"decir"] withString:@"dicho"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"decir"] withString:@"dicho"]; if ( [verb rangeOfString:@"escribir"].location != NSNotFound) - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"escribir"] withString:@"escrito"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"escribir"] withString:@"escrito"]; if ( [verb rangeOfString:@"hacer"].location != NSNotFound) - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"hacer"] withString:@"hecho"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"hacer"] withString:@"hecho"]; if ( [verb rangeOfString:@"morir"].location != NSNotFound) - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"morir"] withString:@"muerto"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"morir"] withString:@"muerto"]; if ( [verb rangeOfString:@"poner"].location != NSNotFound) - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"poner"] withString:@"puesto"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"poner"] withString:@"puesto"]; if ( [verb rangeOfString:@"romper"].location != NSNotFound) - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"romper"] withString:@"roto"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"romper"] withString:@"roto"]; if ( [verb rangeOfString:@"volver"].location != NSNotFound) - return [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"volver"] withString:@"vuelto"]; + return [verb stringByReplacingCharactersInRange:[verb rangeOfString:@"volver"] withString:@"vuelto"]; if ( [verb isEqualToString:@"ver"]) return @"visto"; if ( [@"ar" isEqualToString:verbExit] ) return [verbStem stringByAppendingString:@"ado"]; + else if ( [@"ír" isEqualToString:verbExit] ) + return [verbStem stringByAppendingString:@"ído"]; else return [verbStem stringByAppendingString:@"ido"]; return verb; @@ -583,11 +1188,27 @@ } +// El perfecto de subjuntivo +- (NSString *) conjugatePerfectSubjunctiveVerb:(NSString *) verb inPerson:(NSString *) person { + + // Present of haber + Perfect tense + return [[[self conjugatePresentSubjunctiveVerb:@"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]]; + return [[[self conjugateImperfectVerb:@"haber" inPerson:person] stringByAppendingString:@" "] stringByAppendingString:[self conjugatePerfectVerb:verb]]; + +} + +// el pluscuamperfecto de subjuntivo +- (NSString *) conjugatePastPerfectSubjunctiveVerb:(NSString *) verb inPerson:(NSString *) person { + + // Past of haber + Perfect tense + return [[[self conjugateImperfectSubjunctiveVerb:@"haber" inPerson:person] stringByAppendingString:@" "] stringByAppendingString:[self conjugatePerfectVerb:verb]]; } @@ -606,6 +1227,8 @@ return [[[self conjugateConditionalVerb:@"haber" inPerson:person] stringByAppendingString:@" "] stringByAppendingString:[self conjugatePerfectVerb:verb]]; } +# pragma mark - Gerund + - (NSString *) conjugateGerundVerb:(NSString *) verb inPerson:(NSString *) person { NSString * verbStem = [self getStem:verb]; @@ -614,24 +1237,25 @@ // Irregular if ( [verb isEqualToString:@"ir"]) return @"yendo"; - if ( [[verbStem substringFromIndex:[verb length] - 1] isEqualToString:@"a"] || + if ( verbStem.length > 1 && ( + [[verbStem substringFromIndex:[verb length] - 1] isEqualToString:@"a"] || [[verbStem substringFromIndex:[verb length] - 1] isEqualToString:@"e"] || - [[verbStem substringFromIndex:[verb length] - 1] isEqualToString:@"i"]) + [[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:@"yendo"]; if ( [[self simplePresentEtoIEstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to i - verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"i"]; + verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"]; } if ( [[self simplePresentOtoUEstemChangersArray] containsObject:verb] ) { // Verb changes stem from o to u - verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o"] withString:@"u"]; + verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"u"]; } if ( [[self simplePresentEtoIstemChangersArray] containsObject:verb] ) { // Verb changes stem from e to i - verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e"] withString:@"i"]; + verbStem = [verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"]; } // Regular @@ -641,34 +1265,1907 @@ return verb; } +# pragma mark - Conjugate Verb + - (NSString *) conjugateVerb:(NSString *) verb inPerson:(NSString *) person andTense:(Tense *) tense { + BOOL reflexive = FALSE; + NSString * conjugated = nil; + + if ( [[self getExit:verb] isEqualToString:@"se"] ) { + reflexive = TRUE; + // Getting the stem will remove the last 2 characters + verb = [self getStem:verb]; + } if ( [tense.tense isEqualToString:@"SIMPLE_PRESENT"]) - return [self conjugateSimplePresentVerb:verb inPerson:person]; + conjugated = [self conjugateSimplePresentVerb:verb inPerson:person]; + else if ( [tense.tense isEqualToString:@"PRESENT_SUBJUNCTIVE"]) + conjugated = [self conjugatePresentSubjunctiveVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"SIMPLE_PAST"]) - return [self conjugateSimplePastVerb:verb inPerson:person]; + conjugated = [self conjugateSimplePastVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"IMPERFECT"]) - return [self conjugateImperfectVerb:verb inPerson:person]; + conjugated = [self conjugateImperfectVerb:verb inPerson:person]; + else if ( [tense.tense isEqualToString:@"IMPERFECT_SUBJUNCTIVE"]) + conjugated = [self conjugateImperfectSubjunctiveVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"FUTURE"]) - return [self conjugateFutureVerb:verb inPerson:person]; + conjugated = [self conjugateFutureVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"PERFECT"]) - return [self conjugatePerfectVerb:verb]; + conjugated = [self conjugatePerfectVerb:verb]; else if ( [tense.tense isEqualToString:@"PRESENT_PERFECT"]) - return [self conjugatePresentPerfectVerb:verb inPerson:person]; + conjugated = [self conjugatePresentPerfectVerb:verb inPerson:person]; + else if ( [tense.tense isEqualToString:@"PERFECT_SUBJUNCTIVE"]) + conjugated = [self conjugatePerfectSubjunctiveVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"PAST_PERFECT"]) // Pluscuamperfecto - return [self conjugatePastPerfectVerb:verb inPerson:person]; + conjugated = [self conjugatePastPerfectVerb:verb inPerson:person]; + else if ( [tense.tense isEqualToString:@"PAST_PERFECT_SUBJUNCTIVE"]) // Pluscuamperfecto de subjuntivo + conjugated = [self conjugatePastPerfectSubjunctiveVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"FUTURE_PERFECT"]) - return [self conjugateFuturePerfectVerb:verb inPerson:person]; + conjugated = [self conjugateFuturePerfectVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"CONDITIONAL_PERFECT"]) - return [self conjugateConditionalPerfectVerb:verb inPerson:person]; + conjugated = [self conjugateConditionalPerfectVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"CONDITIONAL"]) - return [self conjugateConditionalVerb:verb inPerson:person]; + conjugated = [self conjugateConditionalVerb:verb inPerson:person]; else if ( [tense.tense isEqualToString:@"GERUND"]) - return [self conjugateGerundVerb:verb inPerson:person]; + conjugated = [self conjugateGerundVerb:verb inPerson:person]; else return @"Invalid tense"; + if ( reflexive ) { + NSLog(@"%@",[[[[self reflexivePersons] objectForKey:person] stringByAppendingString:@" "] stringByAppendingString:conjugated]); + return [[[[self reflexivePersons] objectForKey:person] stringByAppendingString:@" "] stringByAppendingString:conjugated]; + } + else { + return conjugated; + } + +} + +#pragma mark - Generate test answers + +- (NSMutableArray *)addToAnswers:(NSMutableArray *)answers withCorrectAnswer:(NSString *) correct conjugation:(NSString *) conjugation +{ + if ( [conjugation isEqualToString:correct]) + return answers; + else + // Check if answer already exists in array + for ( NSString * a in answers) { + if ( [a isEqualToString:conjugation]) return answers; + } + [answers addObject:conjugation]; + return answers; +} + +- (id) popLastFromArray:(NSMutableArray *)a +{ + id lastObject = nil; + if ( a && a.count > 0 ) { + lastObject = [a lastObject]; + NSLog(@"Popping: %@", lastObject); + [a removeLastObject]; + } + return lastObject; +} + +- (NSMutableArray *)generateFalseConjugationsSimplePresentVerb:(NSString *) verb inPerson:(NSString *)person withCorrectAnswer:(NSString *)correct +{ + NSMutableArray *answers = [[NSMutableArray alloc] init]; + NSString *verbExit = [self getExit:verb]; + NSString *verbStem = [self getStem:verb]; + + if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { + + if ( [verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vaya"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ido"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayo"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vaye"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ido"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ide"]; + } + if ( ![verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"a"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"e"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ó"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"í"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ió"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"o"]]; + + if ( [verbExit isEqualToString:@"er"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"e"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"e"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"e"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"e"]]; + } + + if ( [verbExit isEqualToString:@"ir"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"i"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"i"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"i"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"i"]]; + } + + } else if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"] ) { + + if ( [verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayas"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"idas"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayes"]; + } + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"as"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"es"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"is"]]; + + if ( [verbExit isEqualToString:@"ar"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aste"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abas"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"iste"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"s"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"as"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"as"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"as"]]; + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"es"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"es"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"es"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"es"]]; + + if ( [verbExit isEqualToString:@"ir"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"is"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"is"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"is"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"is"]]; + } + + } else if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { + + if ( [verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vaya"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"idas"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayo"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ido"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ide"]; + } + if ( ![verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"a"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"á"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"e"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"o"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"í"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ió"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aba"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ía"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"e"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"e"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"e"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"e"]]; + + } else if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { + + if ( [verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayamos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"idamos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"idemos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayemos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"idemos"]; + } + + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"amos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"emos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"imos"]]; + + if ( [verbExit isEqualToString:@"ar"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abamos"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"amos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"amos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"amos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"amos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"emos"]]; + + } else if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"] ) { + + if ( [verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayáis"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"idáis"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"idáis"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayéis"]; + } + + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"áis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aís"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"éis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"eís"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"is"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ís"]]; + + if ( [verbExit isEqualToString:@"ar"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abais"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abas"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + } + + if ( [verbExit isEqualToString:@"ar"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"áis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"áis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"áis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"áis"]]; + } + if ( [verbExit isEqualToString:@"er"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"éis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"éis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"éis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"éis"]]; + } + if ( [verbExit isEqualToString:@"ir"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ís"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ís"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ís"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ís"]]; + } + } else if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { + + if ( [verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayan"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"iden"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"idan"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayen"]; + } + + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"an"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"en"]]; + + if ( [verbExit isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"in"]]; + } + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ieron"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aban"]]; + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"en"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"en"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"en"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"en"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"an"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"an"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"an"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"an"]]; + + + } else { + answers = [[NSMutableArray alloc] initWithObjects:@"Answer 1",@"Answer 2",@"Answer 3", @"Answer 4", nil]; + } + + [answers shuffle]; + return [answers mutableCopy]; } +- (NSMutableArray *)generateFalseConjugationsSimplePastVerb:(NSString *) verb inPerson:(NSString *)person withCorrectAnswer:(NSString *)correct +{ + NSMutableArray *answers = [[NSMutableArray alloc] init]; + NSString *verbExit = [self getExit:verb]; + NSString *verbStem = [self getStem:verb]; + + if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { + + if ( [verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fue"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vaye"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayó"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fí"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"iba"]; + } + + if ( ![verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"a"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"e"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ó"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"í"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ió"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"í"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"í"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"í"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"í"]]; + + + } else if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"] ) { + + if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fueste"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayaste"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayeste"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fiësta"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ibaste"]; + } + + if ( [verbExit isEqualToString:@"ar"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"as"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"es"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"is"]]; + } + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aste"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abas"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"iste"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"aste"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"aste"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"aste"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"aste"]]; + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"iste"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"iste"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"iste"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"iste"]]; + + } else if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { + + + if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fui"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayó"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vaye"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fiëstó"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"iba"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"iró"]; + } + if ( ![verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"a"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"á"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"e"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"o"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"í"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ió"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aba"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ía"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"o"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ío"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ío"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ío"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ío"]]; + + } else if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { + + if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fuemos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayemos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayamos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fiëstamos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ibamos"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"iramos"]; + } + + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"amos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"emos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"imos"]]; + + if ( [verbExit isEqualToString:@"ar"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abamos"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"amos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"amos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"amos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"amos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"emos"]]; + + if ( ![verbExit isEqualToString:@"ar"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"imos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"imos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"imos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"imos"]]; + + } + + } else if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"] ) { + + if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fuesteis"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayesteis"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayasteis"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fiëstasteis"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ibeis"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ireis"]; + } + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"astáis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"asteis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"astais"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"esteis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"estéis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"isteis"]]; + + + if ( [verbExit isEqualToString:@"ar"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abais"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abas"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"áis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aís"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"éis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"eís"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"is"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ís"]]; + } + + if ( [verbExit isEqualToString:@"ar"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"astáis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"astáis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"astáis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"astáis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"astais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"astais"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"astais"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"astais"]]; + + } + if ( [verbExit isEqualToString:@"er"] ) { + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"esteis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"esteis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"esteis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"esteis"]]; + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"estéis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"estéis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"estéis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"estéis"]]; + } + if ( ![verbExit isEqualToString:@"ar"] ) { + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ísteis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ísteis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ísteis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ísteis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"isteis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"isteis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"isteis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"isteis"]]; + } + } else if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { + + if ( [verb isEqualToString:@"ir"] || [verb isEqualToString:@"ser"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fuiron"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayaron"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayeron"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fieron"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"ibaron"]; + } + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"an"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"en"]]; + + if ( [verbExit isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"in"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"iron"]]; + } + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ieron"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"eron"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aron"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aban"]]; + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"aron"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"aron"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"aron"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"aron"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"eron"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"eron"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"eron"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"eron"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ieron"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ieron"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ieron"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ieron"]]; + + } else { + answers = [[NSMutableArray alloc] initWithObjects:@"Answer 1",@"Answer 2",@"Answer 3", @"Answer 4", nil]; + } + + [answers shuffle]; + return [answers mutableCopy]; +} + + + +- (NSMutableArray *)generateFalseConjugationsImperfectVerb:(NSString *) verb inPerson:(NSString *)person withCorrectAnswer:(NSString *)correct +{ + NSMutableArray *answers = [[NSMutableArray alloc] init]; + NSString *verbExit = [self getExit:verb]; + NSString *verbStem = [self getStem:verb]; + + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[self conjugateImperfectSubjunctiveVerb:verb inPerson:person]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[self conjugateImperfectVerb:verb inPerson:person]]; + + if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"] || + [person isEqualToString:@"THIRD_PERSON_SINGULAR"] ) { + + if ( [verb isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fue"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vaye"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"vayó"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"fí"]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:@"iba"]; + } + + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"a"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"e"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"í"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ió"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aba"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ía"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ia"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"aba"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"aba"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"aba"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"aba"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ía"]]; + + + } else if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"] ) { + + if ( [verbExit isEqualToString:@"ar"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"as"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"es"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"is"]]; + } + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ias"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ías"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"iás"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abas"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"abas"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"abas"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"abas"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"abas"]]; + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ías"]]; + + } else if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"amos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"emos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"imos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abamos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ábamos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"iamos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íamos"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ábamos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ábamos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ábamos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ábamos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"íamos"]]; + + + } else if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"] ) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"asteis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"astais"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abais"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ábais"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"abaís"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"iaís"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"isteis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"áis"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"éis"]]; + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"abais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"abais"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"abais"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"abais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"íais"]]; + + } else if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"an"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"en"]]; + + if ( [verbExit isEqualToString:@"ir"] ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"in"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"iron"]]; + } + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ieron"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"eron"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aron"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"aban"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ían"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ián"]]; + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ian"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"aban"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"aban"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"aban"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"aban"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ían"]]; + + } else { + answers = [[NSMutableArray alloc] initWithObjects:@"Answer 1",@"Answer 2",@"Answer 3", @"Answer 4", nil]; + } + + [answers shuffle]; + return [answers mutableCopy]; +} + + +- (NSMutableArray *)generateFalseConjugationsFutureVerb:(NSString *) verb inPerson:(NSString *)person withCorrectAnswer:(NSString *)correct +{ + NSMutableArray *answers = [[NSMutableArray alloc] init]; + NSString *verbExit = [self getExit:verb]; + NSString *verbStem = [self getStem:verb]; + + if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"e"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"ó"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"á"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"e"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ó"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dré"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"drá"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ré"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"rá"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ré"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"rá"]]; + } + + if ( [verbExit isEqualToString:@"ir"]) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"í"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"á"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"á"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"á"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"á"]]; + + } else if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"] ) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"as"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"es"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"és"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ás"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"es"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"és"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"drés"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"drás"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"rés"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"rás"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"rés"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"rás"]]; + } + + if ( [verbExit isEqualToString:@"ir"]) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"ís"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"és"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"és"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"és"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"és"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ás"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ás"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ás"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ás"]]; + + } else if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"a"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"ó"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"a"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ó"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dré"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"drá"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ré"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"rá"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ré"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"rá"]]; + } + + if ( [verbExit isEqualToString:@"ir"]) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"í"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"é"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"á"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"á"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"á"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"á"]]; + + } else if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"amos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"imos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"abamos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"amos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"imos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"abamos"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dremos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dramos"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"remos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ramos"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"remos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ramos"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"emos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"emos"]]; + + + } else if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"] ) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"eís"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"áis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"aís"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"abáis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"áis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"éis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"abáis"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dréis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dráis"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"réis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"réis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"réis"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"réis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ráis"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"éis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"éis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"éis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"éis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"áis"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"áis"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"áis"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"áis"]]; + + + } else if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"én"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"an"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"en"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"én"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"án"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"en"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"drán"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dran"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dren"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"rán"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ran"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ren"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"rán"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ran"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ren"]]; + } + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"én"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"én"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"én"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"én"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"án"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"án"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"án"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"án"]]; + + } else { + answers = [[NSMutableArray alloc] initWithObjects:@"Answer 1",@"Answer 2",@"Answer 3", @"Answer 4", nil]; + } + + [answers shuffle]; + return [answers mutableCopy]; +} + +- (NSMutableArray *)generateFalseConjugationsConditionalVerb:(NSString *) verb inPerson:(NSString *)person withCorrectAnswer:(NSString *)correct +{ + NSMutableArray *answers = [[NSMutableArray alloc] init]; + NSString *verbExit = [self getExit:verb]; + NSString *verbStem = [self getStem:verb]; + + if ( [person isEqualToString:@"FIRST_PERSON_SINGULAR"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"ia"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"a"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ía"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"á"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ía"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"é"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dría"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ría"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ría"]]; + } + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + } else if ( [person isEqualToString:@"SECOND_PERSON_SINGULAR"] ) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"és"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"ias"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"as"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ías"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"as"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ias"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"é"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"drías"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"rías"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"rías"]]; + } + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ías"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ías"]]; + + } else if ( [person isEqualToString:@"THIRD_PERSON_SINGULAR"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"é"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"ia"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"a"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ía"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"á"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ía"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"é"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dría"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ría"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ría"]]; + } + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ía"]]; + + } else if ( [person isEqualToString:@"FIRST_PERSON_PLURAL"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"émos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"iamos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"amas"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íamos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ámos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"íamos"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"émos"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dríamos"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ríamos"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ríamos"]]; + } + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"íamos"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"íamos"]]; + + } else if ( [person isEqualToString:@"SECOND_PERSON_PLURAL"] ) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"eís"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"áis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"aís"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"abáis"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"íais"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ás"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"íais"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"íeis"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"dríais"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"ríais"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ríais"]]; + } + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"íais"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"íais"]]; + + } else if ( [person isEqualToString:@"THIRD_PERSON_PLURAL"]) { + + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"én"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"ian"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verb stringByAppendingString:@"an"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"ía"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"án"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"ían"]]; + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[self getFutureStem:verb] stringByAppendingString:@"én"]]; + + if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"l"] || + [[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"n"] + )) + { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"drían"]]; + } else if ( verbStem.length > 1 && + ([[verbStem substringFromIndex:verbStem.length -1] isEqualToString:@"c"]) + ) { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[verbStem substringToIndex:verbStem.length -1] stringByAppendingString:@"rían"]]; + } else { + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[verbStem stringByAppendingString:@"rían"]]; + } + + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:verbExit] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:verbExit] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ían"]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers withCorrectAnswer:correct conjugation:[[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:verbExit] stringByAppendingString:@"ían"]]; + + } else { + answers = [[NSMutableArray alloc] initWithObjects:@"Answer 1",@"Answer 2",@"Answer 3", @"Answer 4", nil]; + } + + [answers shuffle]; + return [answers mutableCopy]; +} + + + +- (NSMutableArray *)generateFalseConjugationsPerfectVerb:(NSString *) verb withHaberConjugation:(NSString *)haberConj withCorrectAnswer:(NSString *)correct inPerson:(NSString *)person +{ + NSMutableArray *answers = [[NSMutableArray alloc] init]; + NSString *verbExit = [self getExit:verb]; + NSString *verbStem = [self getStem:verb]; + + if ((arc4random() % 2) == 0 ) { + + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[self conjugateFuturePerfectVerb:verb inPerson:person]]; + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[self conjugatePastPerfectVerb:verb inPerson:person]]; + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[self conjugatePresentPerfectVerb:verb inPerson:person]]; + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[self conjugatePastPerfectSubjunctiveVerb:verb inPerson:person]]; + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[self conjugatePerfectSubjunctiveVerb:verb inPerson:person]]; + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[self conjugateConditionalPerfectVerb:verb inPerson:person]]; + + } else { + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[verbStem stringByAppendingString:@"ado"]]]; + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[verbStem stringByAppendingString:@"ido"]]]; + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[verbStem stringByAppendingString:@"endo"]]]; + + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[verbStem stringByAppendingString:@"iendo"]]]; + + if ( [verbExit isEqualToString:@"ir"]){ + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[verbStem stringByAppendingString:@"ierto"]]]; + } + + if ( [verbExit isEqualToString:@"ar"]){ + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ado"]]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ado"]]]; + + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ado"]]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ado"]]]; + } else { + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"ie"] stringByAppendingString:@"ido"]]]; + + if ( [verbStem rangeOfString:@"e" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"e" options:NSBackwardsSearch] withString:@"i"] stringByAppendingString:@"ido"]]]; + + + if ( [verbStem rangeOfString:@"o" options:NSBackwardsSearch].location != NSNotFound) + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"o" options:NSBackwardsSearch] withString:@"ue"] stringByAppendingString:@"ido"]]]; + + if ( [verbStem rangeOfString:@"u"].location != NSNotFound) + [self addToAnswers:answers + withCorrectAnswer:correct + conjugation:[[haberConj stringByAppendingString:@" "] stringByAppendingString:[[verbStem stringByReplacingCharactersInRange:[verbStem rangeOfString:@"u"] withString:@"ue"] stringByAppendingString:@"ido"]]]; + } + } + + [answers shuffle]; + return [answers mutableCopy]; +} + +- (NSMutableArray *) getTestConjugationsForVerb:(NSString *) verb inPerson:(NSString *) person andTense:(Tense *) tense { + + BOOL reflexive = FALSE; + + NSLog(@"Getting test conjugation for %@ in person %@ and %@",verb,person,tense); + + if ( [[self getExit:verb] isEqualToString:@"se"] ) { + reflexive = TRUE; + // Getting the stem will remove the last 2 characters + verb = [self getStem:verb]; + } + + NSString * correctAnswer = nil; + NSMutableArray * wrongAnswers = nil; + NSMutableArray * answers = [[NSMutableArray alloc] init]; + + if ( reflexive) { + correctAnswer = [[[[self reflexivePersons] objectForKey:person] stringByAppendingString:@" "] stringByAppendingString:[self conjugateVerb:verb inPerson:person andTense:tense]]; + } else { + correctAnswer = [self conjugateVerb:verb inPerson:person andTense:tense]; + } + + + NSLog(@"Correct answer: %@", correctAnswer); + + if ( [tense.tense isEqualToString:@"SIMPLE_PRESENT"]) + wrongAnswers = [self generateFalseConjugationsSimplePresentVerb:verb inPerson:person withCorrectAnswer:correctAnswer]; + else if ( [tense.tense isEqualToString:@"PRESENT_SUBJUNCTIVE"]) + wrongAnswers = [self generateFalseConjugationsSimplePresentVerb:verb inPerson:person withCorrectAnswer:correctAnswer]; + else if ( [tense.tense isEqualToString:@"SIMPLE_PAST"]) + wrongAnswers = [self generateFalseConjugationsSimplePastVerb:verb inPerson:person withCorrectAnswer:correctAnswer]; + else if ( [tense.tense isEqualToString:@"IMPERFECT"]) + wrongAnswers = [self generateFalseConjugationsImperfectVerb:verb inPerson:person withCorrectAnswer:correctAnswer]; + else if ( [tense.tense isEqualToString:@"IMPERFECT_SUBJUNCTIVE"]) + wrongAnswers = [self generateFalseConjugationsImperfectVerb:verb inPerson:person withCorrectAnswer:correctAnswer]; + else if ( [tense.tense isEqualToString:@"PRESENT_PERFECT"]) + wrongAnswers = [self generateFalseConjugationsPerfectVerb:verb withHaberConjugation:[self conjugateSimplePresentVerb:@"haber" inPerson:person] withCorrectAnswer:correctAnswer inPerson:person]; + else if ( [tense.tense isEqualToString:@"PERFECT_SUBJUNCTIVE"]) + wrongAnswers = [self generateFalseConjugationsPerfectVerb:verb withHaberConjugation:[self conjugatePresentSubjunctiveVerb:@"haber" inPerson:person] withCorrectAnswer:correctAnswer inPerson:person]; + else if ( [tense.tense isEqualToString:@"PAST_PERFECT"]) + wrongAnswers = [self generateFalseConjugationsPerfectVerb:verb withHaberConjugation:[self conjugateImperfectVerb:@"haber" inPerson:person] withCorrectAnswer:correctAnswer inPerson:person]; + else if ( [tense.tense isEqualToString:@"PAST_PERFECT_SUBJUNCTIVE"]) + wrongAnswers = [self generateFalseConjugationsPerfectVerb:verb withHaberConjugation:[self conjugateImperfectSubjunctiveVerb:@"haber" inPerson:person] withCorrectAnswer:correctAnswer inPerson:person]; + else if ( [tense.tense isEqualToString:@"FUTURE"]) + wrongAnswers = [self generateFalseConjugationsFutureVerb:verb inPerson:person withCorrectAnswer:correctAnswer]; + else if ( [tense.tense isEqualToString:@"FUTURE_PERFECT"]) + wrongAnswers = [self generateFalseConjugationsPerfectVerb:verb withHaberConjugation:[self conjugateFutureVerb:@"haber" inPerson:person] withCorrectAnswer:correctAnswer inPerson:person]; + else if ( [tense.tense isEqualToString:@"CONDITIONAL"]) + wrongAnswers = [self generateFalseConjugationsConditionalVerb:verb inPerson:person withCorrectAnswer:correctAnswer]; + else if ( [tense.tense isEqualToString:@"CONDITIONAL_PERFECT"]) + wrongAnswers = [self generateFalseConjugationsPerfectVerb:verb withHaberConjugation:[self conjugateConditionalVerb:@"haber" inPerson:person] withCorrectAnswer:correctAnswer inPerson:person]; + else + wrongAnswers = [[NSMutableArray alloc] initWithObjects:@"Answer 1",@"Answer 2",@"Answer 3", nil]; + + if ( reflexive) { + // Need to correct the wrong answers + NSMutableArray *rAnswers = [[NSMutableArray alloc] init]; + for ( NSString * v in wrongAnswers){ + [rAnswers addObject:[[[[self reflexivePersons] objectForKey:person] stringByAppendingString:@" "] stringByAppendingString:v]]; + } + wrongAnswers = rAnswers; + } + + // Add the correct answer + [answers addObject:correctAnswer]; + + // add 3 wrong answers + [answers addObject:[self popLastFromArray:wrongAnswers]]; + [answers addObject:[self popLastFromArray:wrongAnswers]]; + [answers addObject:[self popLastFromArray:wrongAnswers]]; + + [answers shuffle]; + return [answers mutableCopy]; +} + @end diff --git a/Espagram/Tense.h b/Espagram/Tense.h new file mode 100644 index 0000000..253aa4a --- /dev/null +++ b/Espagram/Tense.h @@ -0,0 +1,17 @@ +// +// Tense.h +// Espagram +// +// Created by Abel Fokkinga on 11/8/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import + +@interface Tense : NSObject + +@property (nonatomic, strong) NSString * tense; + +- (NSString *) getTenseInLanguage:(NSString *)language; + +@end diff --git a/Espagram/Tense.m b/Espagram/Tense.m new file mode 100644 index 0000000..7eab749 --- /dev/null +++ b/Espagram/Tense.m @@ -0,0 +1,73 @@ +// +// Tense.m +// Espagram +// +// Created by Abel Fokkinga on 11/8/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Tense.h" + +@interface Tense() +@property (nonatomic, strong) NSDictionary * text; +@end + +@implementation Tense + +@synthesize tense = _tense; +@synthesize text = _text; + +- (void) tense:(NSString *)t { + if ( ![t isEqualToString:_tense]){ + _tense = t; + // reset dictionary + NSLog(@"Resetting tense"); + self.text = nil; + } +} + +- (NSDictionary *) text { + if ( !_text) { + if ( [self.tense isEqualToString:@"SIMPLE_PRESENT"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Presente",@"Simple present",@"Onvoltooid tegenwoordige tijd",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"SIMPLE_PAST"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Indefinido",@"Simple past",@"Verleden tijd",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"IMPERFECT"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Imperfecto",@"Imperfect",@"Onvoltooid verleden tijd",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"FUTURE"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Futuro",@"Future",@"Toekomstige tijd",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"PRESENT_PERFECT"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Perfecto",@"Present perfect",@"Pretérito perfecto",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"PAST_PERFECT"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Pluscuamperfecto",@"Past perfect",@"Pretérito pluscuamperfecto",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"FUTURE_PERFECT"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Futuro perfecto",@"Future perfect",@"Pretérito pluscuamperfecto",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"CONDITIONAL"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Condicional",@"Conditional",@"Voorwaardelijke wijs",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"GERUND"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Gerundio",@"Gerund",@"Tegenwoordig deelwoord",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + if ( [self.tense isEqualToString:@"IMPERATIVE"]) + _text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc] + initWithObjects:@"Imperativo",@"Imperative",@"Gebiedende wijs",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]]; + } + + return _text; +} + +- (NSString *) getTenseInLanguage:(NSString *)language { + return [self.text objectForKey:language]; +} + + + + +@end diff --git a/Espagram/Tenses.h b/Espagram/Tenses.h deleted file mode 100644 index 1095f01..0000000 --- a/Espagram/Tenses.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Tenses.h -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import -#import - - -@interface Tenses : NSManagedObject - -@property (nonatomic, retain) NSString * tense; -@property (nonatomic, retain) NSString * language; -@property (nonatomic, retain) NSString * translation; - -@end diff --git a/Espagram/Tenses.m b/Espagram/Tenses.m deleted file mode 100644 index cb53cd0..0000000 --- a/Espagram/Tenses.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// Tenses.m -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "Tenses.h" - - -@implementation Tenses - -@dynamic tense; -@dynamic language; -@dynamic translation; - -@end diff --git a/Espagram/TestBrain.h b/Espagram/TestBrain.h deleted file mode 100644 index cce0b75..0000000 --- a/Espagram/TestBrain.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// TestBrain.h -// Espagram -// -// Created by Abel Fokkinga on 10/20/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import -#import "TestableConjugation.h" - -@interface TestBrain : NSObject - -@property (readonly) NSArray *testVerb; - - -- (NSArray *) testConjugation:(TestableConjugation *) conjugation; - -- (Boolean *) checkAnswer:(NSString *)answer forConjugation:(TestableConjugation *) conjugation; - - -@end diff --git a/Espagram/TestBrain.m b/Espagram/TestBrain.m deleted file mode 100644 index 93466f0..0000000 --- a/Espagram/TestBrain.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// TestBrain.m -// Espagram -// -// Created by Abel Fokkinga on 10/20/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "TestBrain.h" - -@interface TestBrain() - -@property (nonatomic, strong) NSDictionary *testSet; - -@end - -@implementation TestBrain - -@synthesize testSet = _testSet; - - -- (NSArray *) testConjugation:(TestableConjugation *) conjugation { -return nil; -} - -- (int) checkAnswer:(NSString *)answer forConjugation:(TestableConjugation *) conjugation { - return true; -} - - - - - -@end diff --git a/Espagram/TestableVerb.h b/Espagram/TestableVerb.h new file mode 100644 index 0000000..65b8503 --- /dev/null +++ b/Espagram/TestableVerb.h @@ -0,0 +1,18 @@ +// +// TestableVerb.h +// Espagram +// +// Created by Abel Fokkinga on 11/15/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import +#import "Verb.h" + +@interface TestableVerb : NSObject + +@property (nonatomic, strong) Verb * verb; +@property (nonatomic, strong) NSString * person; +@property BOOL failed; + +@end diff --git a/Espagram/TestableVerb.m b/Espagram/TestableVerb.m new file mode 100644 index 0000000..320cb9a --- /dev/null +++ b/Espagram/TestableVerb.m @@ -0,0 +1,18 @@ +// +// TestableVerb.m +// Espagram +// +// Created by Abel Fokkinga on 11/15/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "TestableVerb.h" + +@implementation TestableVerb + +@synthesize verb = _verb; +@synthesize person = _person; +@synthesize failed = _failed; + + +@end diff --git a/Espagram/Verb+Create.h b/Espagram/Verb+Create.h new file mode 100644 index 0000000..16b7d00 --- /dev/null +++ b/Espagram/Verb+Create.h @@ -0,0 +1,16 @@ +// +// Verb+Create.h +// Espagram +// +// Created by Abel Fokkinga on 11/16/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Verb.h" +#import "Lesson.h" + +@interface Verb (Create) + ++ (void) addVerb:(NSString *)newVerb andMeaning:(NSString *)meaning toLesson:(Lesson *)lesson; + +@end diff --git a/Espagram/Verb+Create.m b/Espagram/Verb+Create.m new file mode 100644 index 0000000..ac8aeb8 --- /dev/null +++ b/Espagram/Verb+Create.m @@ -0,0 +1,61 @@ +// +// Verb+Create.m +// Espagram +// +// Created by Abel Fokkinga on 11/16/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Verb+Create.h" + + +@implementation Verb (Create) + ++ (void) addVerb:(NSString *)newVerb andMeaning:(NSString *)meaning toLesson:(Lesson *)lesson +{ + Verb * verb = [NSEntityDescription insertNewObjectForEntityForName:@"Verb" inManagedObjectContext:[lesson managedObjectContext]]; + + // Check first if the lessons already contains this verb + for ( Verb * v in lesson.verbs) { + if ( [newVerb isEqualToString:v.verb]) { + if (meaning == nil) + return; + else if ([meaning isEqualToString:v.meaning]) + return; + } + } + + if ( [lesson.conjugator isEqualToString:@"Spanish"]) { + if ( newVerb.length >= 2 ) { + NSString *verbExit = [newVerb substringFromIndex:newVerb.length - 2]; + if ( ![verbExit isEqualToString:@"ar"] && + ![verbExit isEqualToString:@"er"] && + ![verbExit isEqualToString:@"ir"] && + ![verbExit isEqualToString:@"ír"] && + ![verbExit isEqualToString:@"se"] ) { + // Not an existing Spanish verb + return; + } + if ( [verbExit isEqualToString:@"se"] && newVerb.length >= 4 ) { + verbExit = [[newVerb substringFromIndex:newVerb.length - 4] substringToIndex:2]; + if ( ![verbExit isEqualToString:@"ar"] && + ![verbExit isEqualToString:@"er"] && + ![verbExit isEqualToString:@"ir"] && + ![verbExit isEqualToString:@"ír"] ) { + // Not an existing Spanish verb + return; + } + } + } else { + // Verb should be longer than 2 characters + return; + } + } + NSLog(@"Adding word %@", newVerb); + verb.verb = newVerb; + verb.meaning = meaning; + [lesson addVerbsObject:verb]; + [[lesson managedObjectContext] save:nil]; +}; + +@end diff --git a/Espagram/Verb.h b/Espagram/Verb.h new file mode 100644 index 0000000..70c207d --- /dev/null +++ b/Espagram/Verb.h @@ -0,0 +1,20 @@ +// +// Verb.h +// Espagram +// +// Created by Abel Fokkinga on 11/13/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import +#import + +@class Lesson; + +@interface Verb : NSManagedObject + +@property (nonatomic, retain) NSString * meaning; +@property (nonatomic, retain) NSString * verb; +@property (nonatomic, retain) Lesson *lesson; + +@end diff --git a/Espagram/Verb.m b/Espagram/Verb.m new file mode 100644 index 0000000..e5e3cae --- /dev/null +++ b/Espagram/Verb.m @@ -0,0 +1,19 @@ +// +// Verb.m +// Espagram +// +// Created by Abel Fokkinga on 11/13/12. +// Copyright (c) 2012 Abel Fokkinga. All rights reserved. +// + +#import "Verb.h" +#import "Lesson.h" + + +@implementation Verb + +@dynamic meaning; +@dynamic verb; +@dynamic lesson; + +@end diff --git a/Espagram/Verbs.h b/Espagram/Verbs.h deleted file mode 100644 index b091c6d..0000000 --- a/Espagram/Verbs.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// Verbs.h -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import -#import - -@class ConjugatedTense; - -@interface Verbs : NSManagedObject - -@property (nonatomic, retain) NSString * verb; -@property (nonatomic, retain) NSString * language; -@property (nonatomic, retain) NSString * translation; -@property (nonatomic, retain) NSString * root; -@property (nonatomic, retain) ConjugatedTense *conjugatedTenses; - -@end diff --git a/Espagram/Verbs.m b/Espagram/Verbs.m deleted file mode 100644 index 20399bd..0000000 --- a/Espagram/Verbs.m +++ /dev/null @@ -1,21 +0,0 @@ -// -// Verbs.m -// Espagram -// -// Created by Abel Fokkinga on 8/29/12. -// Copyright (c) 2012 Abel Fokkinga. All rights reserved. -// - -#import "Verbs.h" -#import "ConjugatedTense.h" - - -@implementation Verbs - -@dynamic verb; -@dynamic language; -@dynamic translation; -@dynamic root; -@dynamic conjugatedTenses; - -@end diff --git a/Espagram/en.lproj/Localizable.strings b/Espagram/en.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..8cbc40781edafe28dbd072004d42653222e368ed GIT binary patch literal 4318 zcmcInO>+`K5bbk*#TF;cAyH0NSssvtRICIk6LPhHKtvNr@nMWVUVX2Jai+=6fEz4o zcVM>Z_xkn6!0%s&vM+m5$eB!KAU(O2vHZl^$Gf2%$XpgO!`?)0@Sc{(SnpwRgZ-Y| z=^po+_&mhU0{3ft?#mDx?L3Z+JOhJ?u>3wUF0%9pZYU_c}10w<%B_75hfM zz-u8d!0;v3y1asY9q-cK5A^A+B9p)KF~=@h&T-A;yE1in`#|5ri+VV}Q&}o%U)RNo zEu;H^eP>@&24$8tczK5_wy4S52;)q7%+)V>Ex>Z2suzE~r)`3NYhy7Q$b`!UWAQPJ zfH?zVPoKJc@Kb?&4CMhUb3ez+Whlhzyv2xtN1T7lqK4Y&!S?`OSqWCr2V{4sm9QNj zB6>#FZ;DsIw!F&K$?;*u%)p=7n&M8)@>*T3z7ceCsFsP1!|GEW>r=n659>YFr9jS^ z+X3Pjqr+HrF3Y*N^L24l>M=x|dY zoQ<4jqg6$CwL-OU26{VJX zU~b;Q+6j-SWOF^kpR9lJP_ zX@(X%$FiwY=o)ikfQ#oOe<4>_uPGlf2aYfynz;DBfjJRst{l(iwA^OboYLy0@NI=z z&L>)ZOX$a6qn!U$ChLiIL{}9In#H~?YM37US2EVqtU7v_Qw>auQ@H}0z@iMxvRUuj zIc8U1zT(bb#?R-sK0hun(ca4k+}k=;*BNieCm(~&d4XB;e`E49k*5St+JB31JGS|V t$0aAf>=1;_8W2~Y6!iikYYdt - + - + - + - + - - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + @@ -67,77 +89,92 @@ - + - - + + - + - - - + + - + - - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + @@ -146,81 +183,78 @@ - + - - + + - + - - - + + - + - - + - - + + - + - + + + + + + + + + + + @@ -229,83 +263,22 @@ - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -318,57 +291,470 @@ - + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + - + - - - - - - - + - + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -408,8 +794,97 @@ + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -430,25 +905,9 @@ - - - - - - - - - - - - - - - - - - - + + + diff --git a/Espagram/es.lproj/Localizable.strings b/Espagram/es.lproj/Localizable.strings new file mode 100644 index 0000000000000000000000000000000000000000..7e9e85252e0eabd8f79d722a6289dab41f59bc7a GIT binary patch literal 4426 zcmb_fO>fgc5S?>>g_RR}>*OiO)3j2RGT8iD9h zQ}rINtA}r5wQdQ`c@15}#G*p0oHd3k!Z&Rfhm{YmMOcpG0S**O(CM}Q2qd0=c zV%U47V~C>zp2U!zKrUGkdiNHQPL&m#A)-!)DU@4|EWd{cLu}4JEEnov9HpfWM z)qCvX;fu|@mB(B3Rk_{k^7As*ZO;2CLc|#D1U5~OePp4qOgSi(=&cXmC(wA0 z_=j-`G3IllJ+3O59@!Z(H3O5U@Ii>jc;d1pQ_e=nZdSk9V;0Sk^U@rSTuu6i(9f#izVHZ!@KlO*W`TQK^c%ls?JP2x zo?r$s_c@b;j52#p^uWgytG0_866K}spIk#z9y7IrSZ6@UcU8IL^7IUyb10`6KVclmiHy*7`D-K}G4st(&cHR-If%=8 z6}6=W78a4Q?$fv1!qf$#bu^j$(&}JLVT@=uSx4rtvu>c?W0kzdzT`;=&1Z-3Rv*6V zZGeuE%j+&ix39f@rG9SjxxSnO%eh9;N6*Wy*BT;hk0N9dSyksLa@JTyR@eDxglb~U z3imw)sd1|g;}nr$C*n!s|Dw1pl=-MuBh5#-$&)>;T0Cd5&#|-eyxrc9J^6r&ae!LV z!_DU|DvD=dxxTQMmG9X$rfUCH=?|k=%%CG>>`JRod#p#AA?NBt@3p*aMk(}{uV?(H zGtpkx9)YiDT~v^PTmX?rvaYL$ChQRGl`EV^zhLAE`|0?KHRTjl?w!2HIMn)EL>%IA zU9k#RlQkg+s-(2{e$hHtG1*zzqnm6EtEQa*%2761YG;hRymC2q(rI_*@LY4^o}thBE%?mxc)8$6&0cdzS*%^J244D zmc7n+_PsaP=Ie7^R%J_amrLrcu6f(v(l0NV1dBA#yM<07Ex8A1q zJ$|QH3Z9qz?#UC+UDgyVCx5iF&3_$wX4P*PIaXDfbC2cTD>c4V*q698ABLOB#IyGNT9j%vx<~BhA9)3B zo)IWJ+>sm+X6%joWgPnk?9ns9} z1659aNBm8XGFFP3xb3>?KC{}|Gc-?=cF&j?v|brc&D;EZU6ecilB>Gf=}fgpJ&Rt) zn2oreB}e_W(g_g_m^Tl{{rjS+XwJm{H8o=na~4#c%Nx;8sO0pN zT8C6qQuuCl%(R|)qo3)?nDyoig+9@fu-b1uZYSlU{yA=N1g&SF^*#3$ZwWds7pSh! zcF?tm{{((L4XPbM!3li#+~M1F)^x9)m(xA0dC;or%t5hyVZp literal 0 HcmV?d00001 diff --git a/iPhoneIcon_Big.png b/iPhoneIcon_Big.png new file mode 100644 index 0000000000000000000000000000000000000000..e3da5320135d0c7189cc3e890dd5b4c5abd547c5 GIT binary patch literal 21356 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 literal 0 HcmV?d00001 diff --git a/iPhoneIcon_Small.png b/iPhoneIcon_Small.png new file mode 100644 index 0000000000000000000000000000000000000000..d4fcaf12b76f7c3b50713db4b2a87d5a84684f4a GIT binary patch literal 8880 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 literal 0 HcmV?d00001