Exemplo n.º 1
0
        public void CompleteTagConstructor_TagContainsPrivateUseWithAdditionalXDash_RedundantXDashRemoved()
        {
            var cleaner = new Rfc5646TagCleaner("en-x-some-x-whatever");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("en-x-some-whatever"));
        }
Exemplo n.º 2
0
        // There's some confusion between the Palaso migrator and our version 19 migrator about whether an old language
        // tag should have multiple X's if it has more than one private-use component. Since such X's are not
        // significant, ignore them.
        private bool TryGetNewTag(string oldTag, out string newTag)
        {
            var key = RemoveMultipleX(oldTag.ToLowerInvariant());

            if (m_tagMap.TryGetValue(key, out newTag))
            {
                return(!newTag.Equals(oldTag, StringComparison.OrdinalIgnoreCase));
            }
            var cleaner = new Rfc5646TagCleaner(oldTag);

            cleaner.Clean();
            // FieldWorks needs to handle this special case.
            if (cleaner.Language.ToLowerInvariant() == "cmn")
            {
                var region = cleaner.Region;
                if (string.IsNullOrEmpty(region))
                {
                    region = "CN";
                }
                cleaner = new Rfc5646TagCleaner("zh", cleaner.Script, region, cleaner.Variant, cleaner.PrivateUse);
            }
            newTag = cleaner.GetCompleteTag();
            while (m_tagMap.Values.Contains(newTag, StringComparer.OrdinalIgnoreCase))
            {
                // We can't use this tag because it would conflict with what we are mapping something else to.
                cleaner = new Rfc5646TagCleaner(cleaner.Language, cleaner.Script, cleaner.Region, cleaner.Variant,
                                                GetNextDuplPart(cleaner.PrivateUse));
                newTag = cleaner.GetCompleteTag();
            }
            m_tagMap[key] = newTag;
            return(!newTag.Equals(oldTag, StringComparison.OrdinalIgnoreCase));
        }
Exemplo n.º 3
0
        public void Language_XDashBeforeString_AddsQaa()
        {
            var cleaner = new Rfc5646TagCleaner("x-blah");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-x-blah"));
        }
Exemplo n.º 4
0
        public void CompleteTagConstructor_LanguageNameWithAudio_GetZxxxAdded()
        {
            var cleaner = new Rfc5646TagCleaner("aaa-x-audio");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("aaa-Zxxx-x-audio"));
        }
Exemplo n.º 5
0
        public void CompleteTagConstructor_XDashBeforeValidLanguageNameInVariant_NoChange()
        {
            var cleaner = new Rfc5646TagCleaner("", "", "", "x-de", "");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("x-de"));
        }
Exemplo n.º 6
0
        public void CompleteTagConstructor_HasLanguageNameAndOtherName_OtherNameMovedToPrivateUse()
        {
            var cleaner = new Rfc5646TagCleaner("abc-123");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("abc-x-123"));
        }
Exemplo n.º 7
0
        public void CompleteTagConstructor_HasInvalidLanguageName_MovedToPrivateUse()
        {
            var cleaner = new Rfc5646TagCleaner("234");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-x-234"));
        }
Exemplo n.º 8
0
        public void CompleteTagConstructor_ValidRfctagWithLegacyIso3CodeAndPrivateUse_MigratesToRfc2LetterCodeAndPrivateUse()
        {
            var cleaner = new Rfc5646TagCleaner("eng-bogus");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("en-x-bogus"));
        }
Exemplo n.º 9
0
        public void CompleteTagConstructor_PrivateUseWithAudioAndDuplicateX_MakesAudioTag()
        {
            var cleaner = new Rfc5646TagCleaner("x-en-Zxxx-x-audio");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-Zxxx-x-en-Zxxx-audio"));
        }
Exemplo n.º 10
0
 void VerifyRfcCleaner(Rfc5646TagCleaner cleaner, string language, string script, string region, string variant, string completeTag)
 {
     Assert.That(cleaner.Language, Is.EqualTo(language));
     Assert.That(cleaner.Script, Is.EqualTo(script));
     Assert.That(cleaner.Region, Is.EqualTo(region));
     Assert.That(cleaner.Variant, Is.EqualTo(variant));
     Assert.That(cleaner.GetCompleteTag(), Is.EqualTo(completeTag));
 }
Exemplo n.º 11
0
        public void CompleteTagConstructor_QaaWithXDashBeforeValidLanguageName_NoChange()
        {
            var cleaner = new Rfc5646TagCleaner("qaa-x-th");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-x-th"));
            Assert.That(cleaner.Language, Is.EqualTo("qaa"));
            Assert.That(cleaner.PrivateUse, Is.EqualTo("th"));
        }
Exemplo n.º 12
0
        public void CompleteTagConstructor_ValidRfctagWithPrivateUseElements_NoChange()
        {
            var cleaner = new Rfc5646TagCleaner("qaa-Zxxx-x-Zxxx-AUDIO");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-Zxxx-x-Zxxx-AUDIO"));
            // Except, it should have moved things from Language, where the constructor puts them, to the appropriate places.
            Assert.That(cleaner.Language, Is.EqualTo("qaa"));
            Assert.That(cleaner.Script, Is.EqualTo("Zxxx"));
            Assert.That(cleaner.PrivateUse, Is.EqualTo("Zxxx-AUDIO"));
        }
Exemplo n.º 13
0
        public void CompleteTagConstructor_InvalidLanguageNameWithScript_QaaAdded()
        {
            var cleaner = new Rfc5646TagCleaner("wee-Latn");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-Latn-x-wee"));

            // Also when initially "Latn" is properly in the Script field.
            cleaner = new Rfc5646TagCleaner("wee", "Latn", "", "", "");
            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-Latn-x-wee"));
        }
Exemplo n.º 14
0
        ///<summary>
        /// Constructor.
        ///</summary>
        ///<param name="idsInFile"></param>
        ///<param name="replaceIdsInFile"></param>
        ///<param name="writingSystemRepository"></param>
        public static void FindOrphans(
            IEnumerable <string> idsInFile,
            IdReplacementStrategy replaceIdsInFile,
            IWritingSystemRepository writingSystemRepository
            )
        {
            var originalIds = new List <string>(idsInFile);
            var updatedIds  = new List <string>(idsInFile);

            foreach (var wsId in originalIds)
            {
                // Check if it's in the repo
                if (writingSystemRepository.Contains(wsId))
                {
                    continue;
                }
                string newId = wsId;
                if (writingSystemRepository.WritingSystemIdHasChanged(wsId))
                {
                    newId = writingSystemRepository.WritingSystemIdHasChangedTo(wsId);
                }
                else
                {
                    // It's an orphan
                    // Check for the writing system repository compatibility mode
                    if (writingSystemRepository.CompatibilityMode == WritingSystemCompatibility.Flex7V0Compatible)
                    {
                        if (!wsId.StartsWith("x-"))
                        {
                            // Clean it
                            var rfcTagCleaner = new Rfc5646TagCleaner(wsId);
                            rfcTagCleaner.Clean();
                            newId = rfcTagCleaner.GetCompleteTag();
                        }
                    }
                    else
                    {
                        // Clean it
                        var rfcTagCleaner = new Rfc5646TagCleaner(wsId);
                        rfcTagCleaner.Clean();
                        newId = rfcTagCleaner.GetCompleteTag();
                    }
                }
                var conformantWritingSystem = WritingSystemDefinition.Parse(newId);
                // If it changed, then change
                if (conformantWritingSystem.Bcp47Tag != wsId)
                {
                    conformantWritingSystem = WritingSystemDefinition.CreateCopyWithUniqueId(conformantWritingSystem, updatedIds);
                    replaceIdsInFile(wsId, conformantWritingSystem.Bcp47Tag);
                    updatedIds.Remove(wsId);
                    updatedIds.Add(conformantWritingSystem.Bcp47Tag);
                }
                // Check if it's in the repo
                if (writingSystemRepository.Contains(conformantWritingSystem.Bcp47Tag))
                {
                    continue;
                }
                // It's not in the repo so set it
                writingSystemRepository.Set(conformantWritingSystem);
            }
            writingSystemRepository.Save();
        }