Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        //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);
        }