private static void ParseAndSetCharacterAndDelivery(CharacterVerse cv) { int i = cv.CharacterAndDelivery.LastIndexOf("[", StringComparison.InvariantCulture); if (i > -1) { cv.Character = cv.CharacterAndDelivery.Substring(0, i - 1); cv.Delivery = cv.CharacterAndDelivery.Substring(i + 1, cv.CharacterAndDelivery.Length - cv.Character.Length - 3); if (!cv.CharacterAndDelivery.Equals(cv.Character + " [" + cv.Delivery + "]")) { Debug.Fail(cv.CharacterAndDelivery + ", " + cv.Character + " [" + cv.Delivery + "]"); } } else { cv.Character = cv.CharacterAndDelivery; } i = cv.Character.LastIndexOf(" #", StringComparison.InvariantCulture); if (i > -1) { int num; if (!Int32.TryParse(cv.Character.Substring(i + 2), out num)) { Debug.Fail("invalid #: " + cv.Character); } cv.Character = cv.Character.Substring(0, i); } }
public static List <CharacterVerse> All() { var all = new List <CharacterVerse>(); int lineNum = 0; foreach (var line in ControlFiles.modified_CharacterNames_BookChapterVerse.Split(new[] { Environment.NewLine }, StringSplitOptions.None)) { lineNum++; if (string.IsNullOrEmpty(line)) { continue; } var cv = new CharacterVerse(); int endOfRef = IndexOfNth(line, ' ', 2); cv.Reference = line.Substring(0, endOfRef); ParseAndSetReference(ref cv); var theRest = line.Substring(endOfRef + 1); if (!theRest.StartsWith("character=")) { Debug.Fail("line number: " + lineNum); } cv.CharacterAndDelivery = theRest.Substring("character=".Length); ParseAndSetCharacterAndDelivery(cv); all.Add(cv); } return(all); }
private static void SetAlias(CharacterVerse cv) { int charId = Int32.Parse(cv.CharacterId); string character; if (AliasUtil.Aliases.TryGetValue(charId, out character) && cv.Character != character) { cv.Alias = cv.Character; cv.Character = character; } }
private static void GenerateControlFile(List <CharacterVerse> allCv) { int versionNumber = ControlCharacterVerseData.Singleton.ControlFileVersion + 1; allCv.Sort(CharacterVerse.ReferenceComparison); var sb = new StringBuilder(); sb.Append("Control File Version\t").Append(versionNumber).Append("\tGenerated\t").Append(DateTime.Now.ToString("R")).Append(Environment.NewLine); sb.Append(CharacterVerse.AllTabDelimited(allCv)); File.WriteAllText(Path.Combine(kBaseDirForRealOutput, "CharacterVerse.txt"), sb.ToString()); }
private static void ParseAndSetReference(ref CharacterVerse cv) { int i = cv.Reference.IndexOf(" ", StringComparison.InvariantCulture); cv.Book = cv.Reference.Substring(0, i); var theRest = cv.Reference.Substring(i + 1); var split = theRest.Split(new[] { "." }, StringSplitOptions.None); cv.Chapter = split[0]; cv.Verse = split[1]; if (!cv.Reference.Equals(cv.Book + " " + cv.Chapter + "." + cv.Verse)) { Debug.Fail(cv.Reference + ", " + cv.Book + " " + cv.Chapter + "." + cv.Verse); } }
static List <CharacterVerse> ProcessJimFiles() { var allCv = CharacterVerse.All(); var allCci = CharacterCharacterId.All(); var cvNotFound = new List <CharacterVerse>(); var cciFound = new List <CharacterCharacterId>(); foreach (CharacterVerse cv in allCv) { bool found = false; foreach (CharacterCharacterId cci in allCci) { if (cv.CharacterAndDelivery.Equals(cci.Character)) { cv.CharacterId = cci.CharacterId; cv.VoiceTalentId = cci.VoiceTalentId; cciFound.Add(cci); found = true; break; } } if (!found) { cvNotFound.Add(cv); } SetAlias(cv); if (DialogueQuotesReferences.Contains(cv.Book, cv.Chapter, cv.Verse)) { cv.IsDialogue = true; } } Directory.CreateDirectory(kBaseDirForHelperOutput); File.WriteAllText(Path.Combine(kBaseDirForHelperOutput, "CharacterCharacterId_notFullyProcessed.txt"), CharacterCharacterId.AllTabDilimited(allCci)); allCci.RemoveAll(cciFound.Contains); GenerateControlFile(allCv); GenerateCharacterIdMap(allCv); File.WriteAllText(Path.Combine(kBaseDirForHelperOutput, "cvNotFound.txt"), CharacterVerse.AllTabDelimited(cvNotFound)); File.WriteAllText(Path.Combine(kBaseDirForHelperOutput, "cciNotFound.txt"), CharacterCharacterId.AllTabDilimited(allCci)); return(allCv); }
static List <CharacterVerse> FindAliases(List <CharacterVerse> characterVerses) { characterVerses.Sort(CharacterVerse.CharacterComparison); File.WriteAllText(Path.Combine(kBaseDirForHelperOutput, "CharacterVerse_SortCharacter.txt"), CharacterVerse.AllTabDelimited(characterVerses)); var characters = new Dictionary <string, HashSet <string> >(); foreach (var cv in characterVerses) { HashSet <string> idSet; if (characters.TryGetValue(cv.Character, out idSet)) { idSet.Add(cv.CharacterId); } else { characters.Add(cv.Character, new HashSet <string> { cv.CharacterId }); } } var multiCharacters = new Dictionary <string, HashSet <string> >(); foreach (var ch in characters) { if (ch.Value.Count > 1) { multiCharacters.Add(ch.Key, ch.Value); } } File.WriteAllText(Path.Combine(kBaseDirForHelperOutput, "MultipleCharacter.txt"), TabDelimited(multiCharacters)); if (multiCharacters.Count > 0) { MessageBox.Show("Two or more numerical character IDs have the same character name.\n" + "See MultipleCharacter.txt for the character IDs in question."); } characterVerses.Sort(CharacterVerse.CharacterIdComparison); File.WriteAllText(Path.Combine(kBaseDirForHelperOutput, "CharacterVerse_SortCharacterId.txt"), CharacterVerse.AllTabDelimited(characterVerses)); var characterIds = new Dictionary <string, HashSet <string> >(); var uniqueCharacterIds = new HashSet <string>(); foreach (var cv in characterVerses) { uniqueCharacterIds.Add(cv.CharacterId); HashSet <string> idSet; if (characterIds.TryGetValue(cv.CharacterId, out idSet)) { idSet.Add(cv.Character); } else { characterIds.Add(cv.CharacterId, new HashSet <string> { cv.Character }); } } var multiCharacterIds = new Dictionary <string, HashSet <string> >(); foreach (var ch in characterIds) { if (ch.Value.Count > 1) { multiCharacterIds.Add(ch.Key, ch.Value); } } File.WriteAllText(Path.Combine(kBaseDirForHelperOutput, "MultipleCharacterId.txt"), TabDelimited(multiCharacterIds)); if (multiCharacterIds.Count > 0) { MessageBox.Show("Two or more characters have the same numerical character ID.\n" + "One way to resolve this is by making them aliases in AliasUtil.cs.\n" + "See MultipleCharacterId.txt or MultipleCharacterId_Extra.txt for the characters in question."); } ProcessUniqueIds(uniqueCharacterIds); ProcessHelpfulVersionOfMultipleCharacterId(multiCharacterIds, characterVerses); return(characterVerses); }