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"); }
public void CmnRegion_BecomesZh() { var cleaner = new Rfc5646TagCleaner("cmn", "", "NO", "", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "zh", "", "NO", "", "zh-NO"); }
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"); }
public void CompleteTagConstructor_HasLanguageNameAndOtherName_OtherNameMovedToPrivateUse() { var cleaner = new Rfc5646TagCleaner("abc-123"); cleaner.Clean(); Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("abc-x-123")); }
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"); }
public void RegionCodesThatMatchLanguageCodesNotMovedToPrivateUse() { var cleaner = new Rfc5646TagCleaner("rwr-IN"); cleaner.Clean(); VerifyRfcCleaner(cleaner, "rwr", "", "IN", "", "rwr-IN"); }
public void MultiPartVariantWithoutX_InsertsX() { var cleaner = new Rfc5646TagCleaner("fr", "", "", "fonipa-etic", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "fr", "", "", "fonipa", "fr-fonipa-x-etic"); }
public void LanguageCodeAfterX_IsNotShortened() { var cleaner = new Rfc5646TagCleaner("qaa-x-kal"); cleaner.Clean(); VerifyRfcCleaner(cleaner, "qaa", "", "", "", "qaa-x-kal"); }
public void PrivateRegionKnownLanguageAndScript_InsertsPrivateRegionCode() { var cleaner = new Rfc5646TagCleaner("fr", "Latn", "x-ZY", "", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "fr", "Latn", "QM", "", "fr-Latn-QM-x-ZY"); }
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"); }
public void PrivateScriptKnownLanguageAndRegion_InsertsPrivateScriptCode() { var cleaner = new Rfc5646TagCleaner("fr", "x-script", "NO", "", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "fr", "Qaaa", "NO", "", "fr-Qaaa-NO-x-script"); }
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"); }
public void CompleteTagConstructor_HasInvalidLanguageName_MovedToPrivateUse() { var cleaner = new Rfc5646TagCleaner("234"); cleaner.Clean(); Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-x-234")); }
public void CompleteTagConstructor_ValidRfctagWithLegacyIso3CodeAndPrivateUse_MigratesToRfc2LetterCodeAndPrivateUse() { var cleaner = new Rfc5646TagCleaner("eng-bogus"); cleaner.Clean(); Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("en-x-bogus")); }
public void ZhNoRegion_InsertsRegionCN() { var cleaner = new Rfc5646TagCleaner("zh", "", "", "", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "zh", "", "CN", "", "zh-CN"); }
public void PrivateUseVariantLanguageCode_IsNotShortened() { var cleaner = new Rfc5646TagCleaner("qaa", "", "", "", "x-kal"); cleaner.Clean(); VerifyRfcCleaner(cleaner, "qaa", "", "", "", "qaa-x-kal"); }
public void CmnNoRegion_BecomesZhCN() { var cleaner = new Rfc5646TagCleaner("cmn", "", "", "", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "zh", "", "CN", "", "zh-CN"); }
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"); }
public void Pes_BecomesFa() { var cleaner = new Rfc5646TagCleaner("pes", "Latn", "", "", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "fa", "Latn", "", "", "fa-Latn"); }
public void CompleteTagConstructor_LanguageNameWithAudio_GetZxxxAdded() { var cleaner = new Rfc5646TagCleaner("aaa-x-audio"); cleaner.Clean(); Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("aaa-Zxxx-x-audio")); }
public void Arb_BecomesAr() { var cleaner = new Rfc5646TagCleaner("arb", "", "x-ZG", "", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "ar", "", "QM", "", "ar-QM-x-ZG"); }
public void CleanMarksCustomScriptMovedToPrivateUse() { var cleaner = new Rfc5646TagCleaner("en-Zyxw"); cleaner.Clean(); VerifyRfcCleaner(cleaner, "en", "Qaaa", "", "", "en-Qaaa-x-Zyxw"); }
public void EmicWithoutFonipa_AddsFonipa() { var cleaner = new Rfc5646TagCleaner("en", "", "", "x-emic", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "en", "", "", "fonipa", "en-fonipa-x-emic"); }
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")); }
// 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)); }
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")); }
public void Language_XDashBeforeString_AddsQaa() { var cleaner = new Rfc5646TagCleaner("x-blah"); cleaner.Clean(); Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("qaa-x-blah")); }
public void ValidLanguageCodeMarkedPrivate_InsertsQaa() { var cleaner = new Rfc5646TagCleaner("x-de", "", "", "", ""); cleaner.Clean(); VerifyRfcCleaner(cleaner, "qaa", "", "", "", "qaa-x-de"); }
public void CompleteTagConstructor_XDashBeforeValidLanguageNameInVariant_NoChange() { var cleaner = new Rfc5646TagCleaner("", "", "", "x-de", ""); cleaner.Clean(); Assert.That(cleaner.GetCompleteTag(), Is.EqualTo("x-de")); }
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); }