private static void WriteVersion0Ldml(string language, string script, string territory, string variant, TempFile file) { //using a writing system V0 here because the real writing system can't cope with the way //flex encodes private-use language and shouldn't. But using a writing system + ldml adaptor //is the quickest way to generate ldml so I'm using it here. var ws = new WritingSystemDefinitionV0 { ISO639 = language, Script = script, Region = territory, Variant = variant }; new LdmlAdaptorV0().Write(file.Path, ws, null); }
//WS-33992 public void Read_LdmlContainsEmptyCollationElement_SortUsingIsSetToSameAsIfNoCollationElementExisted() { string ldmlWithEmptyCollationElement = "<ldml><!--Comment--><identity><version number=\"\" /><generation date=\"0001-01-01T00:00:00\" /><language type=\"qaa\" /></identity><dates /><collations><collation></collation></collations><special xmlns:palaso=\"urn://palaso.org/ldmlExtensions/v1\" /><special></special></ldml>"; string ldmlwithNoCollationElement = "<ldml><!--Comment--><identity><version number=\"\" /><generation date=\"0001-01-01T00:00:00\" /><language type=\"qaa\" /></identity><dates /><collations/><special xmlns:palaso=\"urn://palaso.org/ldmlExtensions/v1\" /><special></special></ldml>"; string pathToLdmlWithEmptyCollationElement = Path.GetTempFileName(); try { File.WriteAllText(pathToLdmlWithEmptyCollationElement, ldmlWithEmptyCollationElement); string pathToLdmlWithNoCollationElement = Path.GetTempFileName(); try { File.WriteAllText(pathToLdmlWithNoCollationElement, ldmlwithNoCollationElement); var adaptor = new LdmlAdaptorV0(); var wsFromEmptyCollationElement = new WritingSystemDefinitionV0(); adaptor.Read(pathToLdmlWithEmptyCollationElement, wsFromEmptyCollationElement); var wsFromNoCollationElement = new WritingSystemDefinitionV0(); adaptor.Read(pathToLdmlWithNoCollationElement, wsFromNoCollationElement); Assert.AreEqual(wsFromNoCollationElement.SortUsing, wsFromEmptyCollationElement.SortUsing); } finally { File.Delete(pathToLdmlWithNoCollationElement); } } finally { File.Delete(pathToLdmlWithEmptyCollationElement); } }
public void Migrate(string sourceFilePath, string destinationFilePath) { var migrationInfo = new List <LdmlVersion0MigrationStrategy.MigrationInfo>(); if (!Directory.Exists(destinationFilePath)) { Directory.CreateDirectory(destinationFilePath); } var wesayWsCollection = new WritingSystemCollection_V1(); wesayWsCollection.LoadFromLegacyWeSayFile(sourceFilePath); foreach (var writingSystem in wesayWsCollection.Values) { var currentMigrationInfo = new LdmlVersion0MigrationStrategy.MigrationInfo { RfcTagBeforeMigration = writingSystem.ISO }; var wsDef = new WritingSystemDefinitionV0(); if (writingSystem.IsAudio) { wsDef.Script = WellKnownSubTags.Audio.Script; wsDef.Variant = WellKnownSubTags.Audio.PrivateUseSubtag; } else { var subtag = new SubTag(); subtag.AddToSubtag(writingSystem.ISO); subtag.RemoveAllParts("audio"); writingSystem.ISO = subtag.CompleteTag; } wsDef.ISO639 = writingSystem.ISO; wsDef.DefaultFontName = writingSystem.FontName; wsDef.DefaultFontSize = writingSystem.FontSize; wsDef.Abbreviation = writingSystem.Abbreviation; wsDef.IsLegacyEncoded = !writingSystem.IsUnicode; wsDef.Keyboard = writingSystem.KeyboardName; wsDef.RightToLeftScript = writingSystem.RightToLeft; wsDef.SpellCheckingId = writingSystem.SpellCheckingId; wsDef.DateModified = DateTime.Now; if (writingSystem.SortUsing.Equals("CustomICU")) { wsDef.SortRules = writingSystem.CustomSortRules; wsDef.SortUsing = WritingSystemDefinitionV0.SortRulesType.CustomICU; } else if (writingSystem.SortUsing.Equals("CustomSimple")) { wsDef.SortRules = writingSystem.CustomSortRules; wsDef.SortUsing = WritingSystemDefinitionV0.SortRulesType.CustomSimple; } else if (!String.IsNullOrEmpty(writingSystem.SortUsing)) { //when sorting like other language wsDef.SortRules = writingSystem.SortUsing; wsDef.SortUsing = WritingSystemDefinitionV0.SortRulesType.OtherLanguage; } //wsDef.VerboseDescription //not written out by ldmladaptor - flex? //wsDef.StoreID = ??? //what to do? //wsDef.NativeName //not written out by ldmladaptor - flex? string pathForNewLdmlFile = Path.Combine(destinationFilePath, wsDef.Rfc5646 + ".ldml"); new LdmlAdaptorV0().Write(pathForNewLdmlFile, wsDef, null); currentMigrationInfo.RfcTagAfterMigration = wsDef.Rfc5646; if (currentMigrationInfo.RfcTagBeforeMigration != currentMigrationInfo.RfcTagAfterMigration) { _changeLog.LogChange(currentMigrationInfo.RfcTagBeforeMigration, currentMigrationInfo.RfcTagAfterMigration); } migrationInfo.Add(currentMigrationInfo); } _onMigrationCallback(migrationInfo); }