Exemplo n.º 1
0
        public void LanguageSubtagContainsMultipleValidLanguageSubtagsAsWellAsDataThatIsNotValidLanguageScriptRegionOrVariant_AllSubtagsButFirstValidLanguageSubtagAreMovedToPrivateUse()
        {
            var cleaner = new Rfc5646TagCleaner("bogus-en-audio-tpi-bogus2-x-", "", "", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "en", "Zxxx", "", "", "en-Zxxx-x-bogus-audio-bogus2-tpi");
        }
Exemplo n.º 2
0
        public void CmnRegion_BecomesZh()
        {
            var cleaner = new Rfc5646TagCleaner("cmn", "", "NO", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "zh", "", "NO", "", "zh-NO");
        }
Exemplo n.º 3
0
        public void ScriptEndingWithX_IsHandledCorrectly()
        {
            var cleaner = new Rfc5646TagCleaner("zh-Phnx-CN-fonipa-x-emic");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "zh", "Phnx", "CN", "fonipa", "zh-Phnx-CN-fonipa-x-emic");
        }
Exemplo n.º 4
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.º 5
0
        public void NewTag_IsNotModified()
        {
            var cleaner = new Rfc5646TagCleaner("fr-Qaaa-QM-x-Mysc-YY");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "fr", "Qaaa", "QM", "", "fr-Qaaa-QM-x-Mysc-YY");
        }
Exemplo n.º 6
0
        public void RegionCodesThatMatchLanguageCodesNotMovedToPrivateUse()
        {
            var cleaner = new Rfc5646TagCleaner("rwr-IN");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "rwr", "", "IN", "", "rwr-IN");
        }
Exemplo n.º 7
0
        public void MultiPartVariantWithoutX_InsertsX()
        {
            var cleaner = new Rfc5646TagCleaner("fr", "", "", "fonipa-etic", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "fr", "", "", "fonipa", "fr-fonipa-x-etic");
        }
Exemplo n.º 8
0
        public void LanguageCodeAfterX_IsNotShortened()
        {
            var cleaner = new Rfc5646TagCleaner("qaa-x-kal");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "qaa", "", "", "", "qaa-x-kal");
        }
Exemplo n.º 9
0
        public void PrivateRegionKnownLanguageAndScript_InsertsPrivateRegionCode()
        {
            var cleaner = new Rfc5646TagCleaner("fr", "Latn", "x-ZY", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "fr", "Latn", "QM", "", "fr-Latn-QM-x-ZY");
        }
Exemplo n.º 10
0
        public void PrivateRegionMultiPartVariant_InsertsPrivateRegionCode()
        {
            var cleaner = new Rfc5646TagCleaner("fr", "", "x-ZY", "fonipa-x-etic", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "fr", "", "QM", "fonipa", "fr-QM-fonipa-x-ZY-etic");
        }
Exemplo n.º 11
0
        public void PrivateScriptKnownLanguageAndRegion_InsertsPrivateScriptCode()
        {
            var cleaner = new Rfc5646TagCleaner("fr", "x-script", "NO", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "fr", "Qaaa", "NO", "", "fr-Qaaa-NO-x-script");
        }
Exemplo n.º 12
0
        public void AllPrivateComponents_InsertsStandardPrivateCodes()
        {
            var cleaner = new Rfc5646TagCleaner("x-kal", "x-script", "x-RG", "fonipa-x-etic", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "qaa", "Qaaa", "QM", "fonipa", "qaa-Qaaa-QM-fonipa-x-kal-script-RG-etic");
        }
Exemplo n.º 13
0
        public void CompleteTagConstructor_HasInvalidLanguageName_MovedToPrivateUse()
        {
            var cleaner = new Rfc5646TagCleaner("234");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-x-234"));
        }
Exemplo n.º 14
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.º 15
0
        public void ZhNoRegion_InsertsRegionCN()
        {
            var cleaner = new Rfc5646TagCleaner("zh", "", "", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "zh", "", "CN", "", "zh-CN");
        }
Exemplo n.º 16
0
        public void PrivateUseVariantLanguageCode_IsNotShortened()
        {
            var cleaner = new Rfc5646TagCleaner("qaa", "", "", "", "x-kal");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "qaa", "", "", "", "qaa-x-kal");
        }
Exemplo n.º 17
0
        public void CmnNoRegion_BecomesZhCN()
        {
            var cleaner = new Rfc5646TagCleaner("cmn", "", "", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "zh", "", "CN", "", "zh-CN");
        }
Exemplo n.º 18
0
        public void NewTagWithPrivateLanguage_IsNotModified()
        {
            var cleaner = new Rfc5646TagCleaner("qaa-Qaaa-QM-x-kal-Mysc-YY");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "qaa", "Qaaa", "QM", "", "qaa-Qaaa-QM-x-kal-Mysc-YY");
        }
Exemplo n.º 19
0
        public void Pes_BecomesFa()
        {
            var cleaner = new Rfc5646TagCleaner("pes", "Latn", "", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "fa", "Latn", "", "", "fa-Latn");
        }
Exemplo n.º 20
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.º 21
0
        public void Arb_BecomesAr()
        {
            var cleaner = new Rfc5646TagCleaner("arb", "", "x-ZG", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "ar", "", "QM", "", "ar-QM-x-ZG");
        }
Exemplo n.º 22
0
        public void CleanMarksCustomScriptMovedToPrivateUse()
        {
            var cleaner = new Rfc5646TagCleaner("en-Zyxw");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "en", "Qaaa", "", "", "en-Qaaa-x-Zyxw");
        }
Exemplo n.º 23
0
        public void EmicWithoutFonipa_AddsFonipa()
        {
            var cleaner = new Rfc5646TagCleaner("en", "", "", "x-emic", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "en", "", "", "fonipa", "en-fonipa-x-emic");
        }
Exemplo n.º 24
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.º 25
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.º 26
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.º 27
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.º 28
0
        public void ValidLanguageCodeMarkedPrivate_InsertsQaa()
        {
            var cleaner = new Rfc5646TagCleaner("x-de", "", "", "", "");

            cleaner.Clean();
            VerifyRfcCleaner(cleaner, "qaa", "", "", "", "qaa-x-de");
        }
Exemplo n.º 29
0
        public void CompleteTagConstructor_XDashBeforeValidLanguageNameInVariant_NoChange()
        {
            var cleaner = new Rfc5646TagCleaner("", "", "", "x-de", "");

            cleaner.Clean();
            Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("x-de"));
        }
Exemplo n.º 30
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));
 }
		public override void Migrate(string sourceFilePath, string destinationFilePath)
		{
			string sourceFileName = Path.GetFileName(sourceFilePath);

			var writingSystemDefinitionV0 = new WritingSystemDefinitionV0();
			new LdmlAdaptorV0().Read(sourceFilePath, writingSystemDefinitionV0);

			var rfcHelper = new Rfc5646TagCleaner(
				writingSystemDefinitionV0.ISO639,
				writingSystemDefinitionV0.Script,
				writingSystemDefinitionV0.Region,
				writingSystemDefinitionV0.Variant,
				"");

			rfcHelper.Clean();

			var writingSystemDefinitionV1 = new WritingSystemDefinitionV1
				{
					DefaultFontName = writingSystemDefinitionV0.DefaultFontName,
					Abbreviation = writingSystemDefinitionV0.Abbreviation,
					DefaultFontSize = writingSystemDefinitionV0.DefaultFontSize,
					IsUnicodeEncoded = !writingSystemDefinitionV0.IsLegacyEncoded,
					Keyboard = writingSystemDefinitionV0.Keyboard,
					LanguageName = writingSystemDefinitionV0.LanguageName,
					RightToLeftScript = writingSystemDefinitionV0.RightToLeftScript,
					SortRules = writingSystemDefinitionV0.SortRules,
					SortUsing = (WritingSystemDefinitionV1.SortRulesType)writingSystemDefinitionV0.SortUsing,
					SpellCheckingId = writingSystemDefinitionV0.SpellCheckingId,
					VersionDescription = writingSystemDefinitionV0.VersionDescription,
					DateModified = DateTime.Now
				};

			writingSystemDefinitionV1.SetAllComponents(
				rfcHelper.Language,
				rfcHelper.Script,
				rfcHelper.Region,
				ConcatenateVariantAndPrivateUse(rfcHelper.Variant, rfcHelper.PrivateUse)
			);
			_writingSystemsV1[sourceFileName] = writingSystemDefinitionV1;
			//_migratedWs.VerboseDescription //not written out by LdmlAdaptorV1 - flex?
			//_migratedWs.NativeName //not written out by LdmlAdaptorV1 - flex?);

			// Record the details for use in PostMigrate where we change the file name to match the rfc tag where we can.
			var migrationInfo = new MigrationInfo
				{
					FileName = sourceFileName,
					RfcTagBeforeMigration = writingSystemDefinitionV0.Rfc5646,
					RfcTagAfterMigration = writingSystemDefinitionV1.Bcp47Tag
				};
			_migrationInfo.Add(migrationInfo);
		}