コード例 #1
0
ファイル: CharacterVerse.cs プロジェクト: witheej/Glyssen
        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);
            }
        }
コード例 #2
0
ファイル: CharacterVerse.cs プロジェクト: witheej/Glyssen
        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);
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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());
        }
コード例 #5
0
ファイル: CharacterVerse.cs プロジェクト: witheej/Glyssen
        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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }