/// <summary> /// Creates a new writing system. /// </summary> /// <returns></returns> public IWritingSystem Create(string identifier) { lock (m_syncRoot) { if (m_globalStore != null) { IWritingSystemDefinition globalWs; if (m_globalStore.TryGet(identifier, out globalWs)) { return((PalasoWritingSystem)m_globalStore.MakeDuplicate(globalWs)); } } } LanguageSubtag languageSubtag; ScriptSubtag scriptSubtag; RegionSubtag regionSubtag; VariantSubtag variantSubtag; if (!LangTagUtils.GetSubtags(identifier, out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)) { throw new ArgumentException(identifier + " is not a valid RFC5646 language tag."); } var result = Create(languageSubtag, scriptSubtag, regionSubtag, variantSubtag); if (TemplateFolder != null) { // try in our master template file // Todo: have property TemplateFolderPath, initialize in FdoBackendProvider.InitializeWritingSystemManager var template = Path.Combine(TemplateFolder, Path.ChangeExtension(identifier, "ldml")); if (File.Exists(template)) { var loader = new FwLdmlAdaptor(); loader.Read(template, (WritingSystemDefinition)result); } } return(result); }
void VerifySubtagCodes(PalasoWritingSystem ws, string langCode, string scriptCode, string regionCode, string variantCode, string id) { Assert.That(ws.LanguageSubtag.Code, Is.EqualTo(langCode)); if (scriptCode == null) { Assert.That(ws.ScriptSubtag, Is.Null); } else { Assert.That(ws.ScriptSubtag.Code, Is.EqualTo(scriptCode)); } if (regionCode == null) { Assert.That(ws.RegionSubtag, Is.Null); } else { Assert.That(ws.RegionSubtag.Code, Is.EqualTo(regionCode)); } if (variantCode == null) { Assert.That(ws.VariantSubtag, Is.Null); } else { Assert.That(ws.VariantSubtag.Code, Is.EqualTo(variantCode)); } // Now check that we can get the same tags by parsing the ID. LanguageSubtag languageSubtag; ScriptSubtag scriptSubtag; RegionSubtag regionSubtag; VariantSubtag variantSubtag; LangTagUtils.GetSubtags(id, out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag); Assert.That(languageSubtag.Code, Is.EqualTo(langCode)); if (scriptCode == null) { Assert.That(scriptSubtag, Is.Null); } else { Assert.That(scriptSubtag.Code, Is.EqualTo(scriptCode)); } if (regionCode == null) { Assert.That(regionSubtag, Is.Null); } else { Assert.That(regionSubtag.Code, Is.EqualTo(regionCode)); } if (variantCode == null) { Assert.That(variantSubtag, Is.Null); } else { Assert.That(variantSubtag.Code, Is.EqualTo(variantCode)); } }
public void GetSubtags() { LanguageSubtag languageSubtag; ScriptSubtag scriptSubtag; RegionSubtag regionSubtag; VariantSubtag variantSubtag; Assert.IsTrue(LangTagUtils.GetSubtags("en", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.IsNull(regionSubtag); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("en-Latn", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.AreEqual("Latn", scriptSubtag.Code); Assert.IsFalse(scriptSubtag.IsPrivateUse); Assert.IsNull(regionSubtag); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("en-US", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.AreEqual("US", regionSubtag.Code); Assert.IsFalse(regionSubtag.IsPrivateUse); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("en-Latn-US-fonipa-x-etic", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.AreEqual("Latn", scriptSubtag.Code); Assert.IsFalse(scriptSubtag.IsPrivateUse); Assert.AreEqual("US", regionSubtag.Code); Assert.IsFalse(regionSubtag.IsPrivateUse); Assert.AreEqual("fonipa-x-etic", variantSubtag.Code); Assert.IsFalse(variantSubtag.IsPrivateUse); Assert.IsTrue(LangTagUtils.GetSubtags("qaa-x-kal", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("kal", languageSubtag.Code); Assert.IsTrue(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.IsNull(regionSubtag); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("qaa-Qaaa-x-kal-Fake", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("kal", languageSubtag.Code); Assert.IsTrue(languageSubtag.IsPrivateUse); Assert.AreEqual("Fake", scriptSubtag.Code); Assert.IsTrue(scriptSubtag.IsPrivateUse); Assert.IsNull(regionSubtag); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("qaa-QM-x-kal-XA", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("kal", languageSubtag.Code); Assert.IsTrue(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.AreEqual("XA", regionSubtag.Code); Assert.IsTrue(regionSubtag.IsPrivateUse); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("en-Qaaa-QM-x-Fake-QD", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.AreEqual("Fake", scriptSubtag.Code); Assert.IsTrue(scriptSubtag.IsPrivateUse); Assert.AreEqual("QD", regionSubtag.Code); Assert.IsTrue(regionSubtag.IsPrivateUse); Assert.IsNull(variantSubtag); Assert.IsFalse(LangTagUtils.GetSubtags("en_Latn_US_X_ETIC", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); // Although dupl0 is in a position where it would normally be interpreted as a private language code, since it isn't a valid one, // we instead interpret it as simply a variant of qaa, the unknown language. Assert.IsTrue(LangTagUtils.GetSubtags("qaa-x-dupl0", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("qaa", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.IsNull(regionSubtag); Assert.That(variantSubtag.Code, Is.EqualTo("x-dupl0")); Assert.IsTrue(variantSubtag.IsPrivateUse); }
public void GetSubtags() { LanguageSubtag languageSubtag; ScriptSubtag scriptSubtag; RegionSubtag regionSubtag; VariantSubtag variantSubtag; Assert.IsTrue(LangTagUtils.GetSubtags("en", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.IsNull(regionSubtag); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("en-Latn", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.AreEqual("Latn", scriptSubtag.Code); Assert.IsFalse(scriptSubtag.IsPrivateUse); Assert.IsNull(regionSubtag); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("en-US", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.AreEqual("US", regionSubtag.Code); Assert.IsFalse(regionSubtag.IsPrivateUse); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("en-Latn-US-fonipa-x-etic", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.AreEqual("Latn", scriptSubtag.Code); Assert.IsFalse(scriptSubtag.IsPrivateUse); Assert.AreEqual("US", regionSubtag.Code); Assert.IsFalse(regionSubtag.IsPrivateUse); Assert.AreEqual("fonipa-x-etic", variantSubtag.Code); Assert.IsFalse(variantSubtag.IsPrivateUse); Assert.IsTrue(LangTagUtils.GetSubtags("qaa-x-kal", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("kal", languageSubtag.Code); Assert.IsTrue(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.IsNull(regionSubtag); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("qaa-Qaaa-x-kal-Fake", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("kal", languageSubtag.Code); Assert.IsTrue(languageSubtag.IsPrivateUse); Assert.AreEqual("Fake", scriptSubtag.Code); Assert.IsTrue(scriptSubtag.IsPrivateUse); Assert.IsNull(regionSubtag); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("qaa-QM-x-kal-XA", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("kal", languageSubtag.Code); Assert.IsTrue(languageSubtag.IsPrivateUse); Assert.IsNull(scriptSubtag); Assert.AreEqual("XA", regionSubtag.Code); Assert.IsTrue(regionSubtag.IsPrivateUse); Assert.IsNull(variantSubtag); Assert.IsTrue(LangTagUtils.GetSubtags("en-Qaaa-QM-x-Fake-QD", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); Assert.AreEqual("en", languageSubtag.Code); Assert.IsFalse(languageSubtag.IsPrivateUse); Assert.AreEqual("Fake", scriptSubtag.Code); Assert.IsTrue(scriptSubtag.IsPrivateUse); Assert.AreEqual("QD", regionSubtag.Code); Assert.IsTrue(regionSubtag.IsPrivateUse); Assert.IsNull(variantSubtag); Assert.IsFalse(LangTagUtils.GetSubtags("en_Latn_US_X_ETIC", out languageSubtag, out scriptSubtag, out regionSubtag, out variantSubtag)); }