Beispiel #1
0
        /// <summary>
        /// Creates a new writing system.
        /// </summary>
        /// <param name="languageSubtag">The language subtag.</param>
        /// <param name="scriptSubtag">The script subtag.</param>
        /// <param name="regionSubtag">The region subtag.</param>
        /// <param name="variantSubtag">The variant subtag.</param>
        /// <returns></returns>
        public IWritingSystem Create(LanguageSubtag languageSubtag, ScriptSubtag scriptSubtag, RegionSubtag regionSubtag, VariantSubtag variantSubtag)
        {
            if (!languageSubtag.IsValid)
            {
                throw new ArgumentException("Can not create a new writing system with an invalid language tag.");
            }
            PalasoWritingSystem ws;

            lock (m_syncRoot)
                ws = (PalasoWritingSystem)m_localStore.CreateNew();

            ws.LanguageSubtag = languageSubtag;
            ws.ScriptSubtag   = scriptSubtag;
            ws.RegionSubtag   = regionSubtag;
            ws.VariantSubtag  = variantSubtag;
            if (!string.IsNullOrEmpty(languageSubtag.Name))
            {
                ws.Abbreviation = languageSubtag.Name.Length > 3 ? languageSubtag.Name.Substring(0, 3) : languageSubtag.Name;
            }
            else
            {
                ws.Abbreviation = ws.Id;
            }

            CultureInfo ci = MiscUtils.GetCultureForWs(ws.Id);

            if (ci != null)
            {
                ws.SortUsing = WritingSystemDefinition.SortRulesType.OtherLanguage;
                ws.SortRules = ci.Name;
            }

            ws.Modified = false;
            return(ws);
        }
Beispiel #2
0
        private void _scriptsAndVariants_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            // This is a Script link, so for now we'll limit the dialog to only the ScriptRegionVariant combo option.
            var wsSetupModel = new WritingSystemSetupModel(new WritingSystemDefinition(_model.SelectedLanguage.LanguageTag),
                                                           WritingSystemSetupModel.SelectionsForSpecialCombo.ScriptRegionVariant, false);

            wsSetupModel.IdentifierScriptRegionVariantSelected();
            using (var dlg = new ScriptsAndVariantsDialog())
            {
                dlg.BindToModel(wsSetupModel);
                if (dlg.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                // Allow the user to think of the the Script and Variant's Abbreviation as the primary language tag
                // for unlisted languages.  Otherwise, why show it or allow it to be edited?
                var tag  = wsSetupModel.CurrentDefinition.LanguageTag;
                var abbr = wsSetupModel.CurrentDefinition.Abbreviation;
                if (tag.Length >= 3 && LanguageSubtag.IsUnlistedCode(tag.Substring(0, 3)) &&
                    abbr.Length == 3 && LanguageSubtag.IsUnlistedCode(abbr) &&
                    abbr != tag.Substring(0, 3))
                {
                    tag = abbr + tag.Substring(3);
                }
                _model.SelectedLanguage.LanguageTag = tag;
                UpdateReadiness();
            }
        }
        public void GetValidLangCodeForNewLang()
        {
            string storePath       = PrepareTempStore("Store");
            string globalStorePath = PrepareTempStore("GlobalStore");

            EnsureDirectoryIsEmpty(storePath);
            EnsureDirectoryIsEmpty(globalStorePath);

            var globalStore = new GlobalFileWritingSystemStore(globalStorePath);
            var wsManager   = new PalasoWritingSystemManager(
                new LocalFileWritingSystemStore(storePath, globalStore), globalStore);

            Assert.AreEqual("qip", wsManager.GetValidLangTagForNewLang("Qipkey"));
            Assert.AreEqual("sn", wsManager.GetValidLangTagForNewLang("Sn"));
            Assert.AreEqual("eba", wsManager.GetValidLangTagForNewLang("\u00CBbashlish"));             // \u00CB == E with diacritic
            Assert.AreEqual("eee", wsManager.GetValidLangTagForNewLang("\u00CB\u00CB\u00CBlish"));
            // \u00CB == E with diacritic
            Assert.AreEqual("aaa", wsManager.GetValidLangTagForNewLang("U"));

            LanguageSubtag subtag = new LanguageSubtag("qip", "Qipkey", true, null);
            IWritingSystem newWs  = wsManager.Create(subtag, null, null, null);

            wsManager.Set(newWs);
            Assert.AreEqual("aaa", wsManager.GetValidLangTagForNewLang("Qipsing"), "code for 'qip' should already be taken");

            subtag = new LanguageSubtag("aaa", "Qipsing", true, null);
            newWs  = wsManager.Create(subtag, null, null, null);
            wsManager.Set(newWs);
            Assert.AreEqual("aab", wsManager.GetValidLangTagForNewLang("Qipwest"),
                            "code for 'qip' should already be taken twice");

            // ENHANCE: Ideally, we would want to test incrementing the middle and first character,
            // but that would require at least 677 (26^2 + 1) writing systems be created.
        }
Beispiel #4
0
        /// <summary>
        /// Creates a new writing system.
        /// </summary>
        /// <param name="languageSubtag">The language subtag.</param>
        /// <param name="scriptSubtag">The script subtag.</param>
        /// <param name="regionSubtag">The region subtag.</param>
        /// <param name="variantSubtags">The variant subtags.</param>
        /// <returns></returns>
        public CoreWritingSystemDefinition Create(LanguageSubtag languageSubtag, ScriptSubtag scriptSubtag, RegionSubtag regionSubtag, IEnumerable <VariantSubtag> variantSubtags)
        {
            lock (m_syncRoot)
            {
                VariantSubtag[]             variantSubtagsArray = variantSubtags.ToArray();
                string                      langTag             = IetfLanguageTag.Create(languageSubtag, scriptSubtag, regionSubtag, variantSubtagsArray);
                CoreWritingSystemDefinition ws;
                m_repo.WritingSystemFactory.Create(langTag, out ws);
                if (ws.Language != null && languageSubtag != null && ws.Language.Name != languageSubtag.Name)
                {
                    ws.Language = new LanguageSubtag(ws.Language, languageSubtag.Name);
                }
                if (ws.Script != null && scriptSubtag != null && ws.Script.Name != scriptSubtag.Name)
                {
                    ws.Script = new ScriptSubtag(ws.Script, scriptSubtag.Name);
                }
                if (ws.Region != null && regionSubtag != null && ws.Region.Name != regionSubtag.Name)
                {
                    ws.Region = new RegionSubtag(ws.Region, regionSubtag.Name);
                }
                for (int i = 0; i < Math.Min(ws.Variants.Count, variantSubtagsArray.Length); i++)
                {
                    if (ws.Variants[i].Code == variantSubtagsArray[i].Code && ws.Variants[i].Name != variantSubtagsArray[i].Name)
                    {
                        ws.Variants[i] = new VariantSubtag(ws.Variants[i], variantSubtagsArray[i].Name);
                    }
                }
                if (ws.Language != null && !string.IsNullOrEmpty(ws.Language.Name))
                {
                    ws.Abbreviation = ws.Language.Name.Length > 3 ? ws.Language.Name.Substring(0, 3) : ws.Language.Name;
                }
                else
                {
                    ws.Abbreviation = ws.LanguageTag;
                }

                if (ws.DefaultCollation == null)
                {
                    string message;
                    if (SystemCollator.ValidateLanguageTag(ws.LanguageTag, out message))
                    {
                        ws.DefaultCollation = new SystemCollationDefinition {
                            LanguageTag = ws.LanguageTag
                        }
                    }
                    ;
                    else
                    {
                        ws.DefaultCollation = new IcuRulesCollationDefinition("standard");
                    }
                }
                if (ws.DefaultFont == null)
                {
                    ws.DefaultFont = new FontDefinition("Charis SIL");
                }

                ws.AcceptChanges();
                return(ws);
            }
        }
Beispiel #5
0
        public static string GetRailwayDescription(string railwayId, LanguageSubtag languageTag)
        {
            var format = new ResourceLoader().GetString("CaptionLine");

            return((languageTag == LanguageSubtag.Ja)
                                ? String.Format(format, GetRailwayTitleJa(railwayId))
                                : String.Format(format, GetRailwayTitleEn(railwayId)));
        }
Beispiel #6
0
        public static string GetRailDirectionDescription(string railDirection, LanguageSubtag languageTag)
        {
            var format = new ResourceLoader().GetString("CaptionDirection");

            return((languageTag == LanguageSubtag.Ja)
                                ? String.Format(format, GetRailDirectionNameJa(railDirection))
                                : String.Format(format, GetRailDirectionNameEn(railDirection)));
        }
        /// <summary>
        /// Store the language portion of the identifier for the writing system of each
        /// existing reversal index.  This is to facilitate choosing an initial value to
        /// display in the combo box.
        /// </summary>
        /// <param name="ws">The ws.</param>
        private void AddLanguageForExistingRevIdx(IWritingSystem ws)
        {
            LanguageSubtag sLang = ws.LanguageSubtag;

            // LT-4937 : only add if not already present.
            // This is really a Set.
            if (!m_revIdx.Contains(sLang))
            {
                m_revIdx.Add(sLang);
            }
        }
Beispiel #8
0
        public void UpdateContent(LanguageSubtag languageTag)
        {
            this.LanguageTag = languageTag;

            RaisePropertyChanged(() => RailwayId);
            RaisePropertyChanged(() => RailwayDescription);
            RaisePropertyChanged(() => TrainTypeDescription);
            RaisePropertyChanged(() => TerminalStationDescription);
            RaisePropertyChanged(() => RailDirectionDescription);
            RaisePropertyChanged(() => State);
            RaisePropertyChanged(() => Note);
        }
        private IWritingSystem CreateWritingSystem(string wsId, string name, bool addVern)
        {
            IWritingSystem ws     = Cache.ServiceLocator.WritingSystemManager.Set(wsId);
            LanguageSubtag subtag = ws.LanguageSubtag;

            ws.LanguageSubtag = new LanguageSubtag(subtag, name);
            if (addVern)
            {
                Cache.ServiceLocator.WritingSystems.VernacularWritingSystems.Add(ws);
            }
            return(ws);
        }
        public void UpdateContent(LanguageSubtag languageTag)
        {
            this.LanguageTag = languageTag;

            RaisePropertyChanged(() => StationGroupDescription);

            foreach (var train in Trains)
            {
                train.UpdateContent(languageTag);
            }

            State = CheckState(Trains.ToArray());
        }
Beispiel #11
0
        public void UpdateContent(LanguageSubtag languageTag)
        {
            this.LanguageTag = languageTag;

            RaisePropertyChanged(() => RailwayDescription);

            foreach (var train in Trains)
            {
                train.UpdateContent(languageTag);
            }

            StateFromA = CheckState(Trains.Where(x => x.IsFromA).ToArray());
            StateFromB = CheckState(Trains.Where(x => x.IsFromB).ToArray());
        }
Beispiel #12
0
        internal async Task UpdateBaseAsync(LanguageSubtag languageTag)
        {
            if (!CanConvert)
            {
                return;
            }

            var trains = await MetroManager.Current.GetTrainsAsync(_standardLength);

            if (trains == null)
            {
                return;
            }

            UpdateBase(trains, languageTag);
        }
        public void LanguageSubtag_newWS()
        {
            var wsManager = new PalasoWritingSystemManager();

            using (var langSetup = new LanguageSetup())
            {
                langSetup.WritingSystemManager = wsManager;
                langSetup.StartedInModifyState = false;
                langSetup.LanguageName         = "Monkey";
                LanguageSubtag subtag = langSetup.LanguageSubtag;
                Assert.AreEqual("mon", subtag.Code);

                LanguageSubtag newSubtag = new LanguageSubtag("mon", "Moniker", true, null);
                IWritingSystem newWs     = wsManager.Create(newSubtag, null, null, null);
                wsManager.Set(newWs);
                subtag = langSetup.LanguageSubtag;
                Assert.AreEqual("aaa", subtag.Code, "Language code 'mon' should already be in use");
            }
        }
Beispiel #14
0
        private void LoadLanguage(LanguageSubtag languageTag)
        {
            const string optionsHeader         = "OptionsHeaderText";
            const string lineSelectionPriority = "LineSelectionPriorityText";
            const string languageSelection     = "LanguageSelectionText";
            const string clearButton           = "ClearButtonText";
            const string applyButton           = "ApplyButtonText";

            var languageBag = Settings.LanguageList.FirstOrDefault(x => x.Subtag == languageTag);

            if (languageBag != null)
            {
                var context = ResourceContext.GetForViewIndependentUse();                 // Constructing ResourceContext may cause freeze when called multiple times.
                context.Languages = new List <String> {
                    languageBag.FullTag
                };

                var resourceMap = ResourceManager.Current.MainResourceMap.GetSubtree("Resources");

                this.Title = resourceMap.GetValue(optionsHeader, context).ValueAsString;
                this.LineSelectionPriority.Text = resourceMap.GetValue(lineSelectionPriority, context).ValueAsString;
                this.LanguageSelection.Text     = resourceMap.GetValue(languageSelection, context).ValueAsString;
                this.ClearButton.Content        = resourceMap.GetValue(clearButton, context).ValueAsString;
                this.ApplyButton.Content        = resourceMap.GetValue(applyButton, context).ValueAsString;
            }
            else             // Fallback
            {
                var loader = ResourceLoader.GetForCurrentView();

                this.Title = loader.GetString(optionsHeader);
                this.LineSelectionPriority.Text = loader.GetString(lineSelectionPriority);
                this.LanguageSelection.Text     = loader.GetString(languageSelection);
                this.ClearButton.Content        = loader.GetString(clearButton);
                this.ApplyButton.Content        = loader.GetString(applyButton);
            }
        }
Beispiel #15
0
 private void SetScriptsAndVariantsLabel()
 {
     _scriptsAndVariantsLink.Enabled = _model.HaveSufficientInformation;
     if (!_model.HaveSufficientInformation)
     {
         _scriptsAndVariantsLabel.Text    = "";
         _scriptsAndVariantsLabel.Visible = false;
     }
     else
     {
         // Usually it's not interesting to see this unless some script, region, or variant data is present.
         // But when the user has entered a custom unknown language code, this is the only way to confirm it.
         if (_model.LanguageTagContainsScriptRegionVariantInfo || LanguageSubtag.IsUnlistedCode(_model.SelectedLanguage.LanguageTag))
         {
             _scriptsAndVariantsLabel.Text    = "(" + _model.LanguageTag + ")";
             _scriptsAndVariantsLabel.Visible = true;
         }
         else
         {
             _scriptsAndVariantsLabel.Text    = "";
             _scriptsAndVariantsLabel.Visible = false;
         }
     }
 }
Beispiel #16
0
        public void RegisteredLanguages_HasIso3CodeForEnglish()
        {
            LanguageSubtag english = StandardSubtags.RegisteredLanguages["en"];

            Assert.That(english.Iso3Code, Is.EqualTo("eng"));
        }
Beispiel #17
0
        public void RegisteredLanguages_CodeFaHasIso3Fas()
        {
            LanguageSubtag target = StandardSubtags.RegisteredLanguages["fa"];

            Assert.That(target.Iso3Code, Is.EqualTo("fas"));
        }
Beispiel #18
0
		/// <summary>
		/// Initializes a new instance of the <see cref="T:LanguageSubtag"/> class.
		/// </summary>
		/// <param name="subtag">The subtag.</param>
		/// <param name="name">The name.</param>
		public LanguageSubtag(LanguageSubtag subtag, string name)
			: this(subtag.Code, name, subtag.IsPrivateUse, subtag._iso3Code)
		{
		}
Beispiel #19
0
 public static string GetStationDescription(string stationId, LanguageSubtag languageTag)
 {
     return((languageTag == LanguageSubtag.Ja)
                         ? GetStationTitleJa(stationId)
                         : GetStationTitleEn(stationId));
 }
Beispiel #20
0
 public static string GetTrainTypeDescription(string trainType, LanguageSubtag languageTag)
 {
     return((languageTag == LanguageSubtag.Ja)
                         ? GetTrainTypeNameJa(trainType)
                         : GetTrainTypeNameEn(trainType));
 }
Beispiel #21
0
 /// <summary></summary>
 public IWritingSystem Create(LanguageSubtag languageSubtag, ScriptSubtag scriptSubtag, RegionSubtag regionSubtag, VariantSubtag variantSubtag)
 {
     throw new NotImplementedException();
 }
Beispiel #22
0
 public LanguageBag(LanguageSubtag subtag, string fullTag, string displayName)
 {
     this.Subtag      = subtag;
     this.FullTag     = fullTag;
     this.DisplayName = displayName;
 }
Beispiel #23
0
        private void UpdateBase(Train[] trains, LanguageSubtag languageTag)
        {
            var locker = new Object();

            lock (locker)
            {
                foreach (var stationGroup in _core.OfType <StationGroupViewModel>())
                {
                    if (trains != null)
                    {
                        var stationIds = stationGroup.Members.Select(x => x.StationId).ToArray();
                        stationGroup.Trains.Clear();

                        foreach (var train in trains.Where(x => x.ToStationId == null))
                        {
                            if (stationIds.Contains(train.FromStationId))
                            {
                                stationGroup.Trains.Add(new TrainViewModel(train));
                            }
                        }
                    }

                    stationGroup.UpdateContent(languageTag);
                }

                foreach (var connector in _core.OfType <ConnectorViewModel>())
                {
                    if (trains != null)
                    {
                        var buffList = new List <TrainViewModel>();

                        foreach (var train in trains)
                        {
                            if (train.FromStationId == connector.StationIdA)
                            {
                                if (train.ToStationId == connector.StationIdB)
                                {
                                    buffList.Add(new TrainViewModel(train, true, false));
                                }
                                else if (train.RailwayId == connector.RailwayId)
                                {
                                    var terminalStationIndex = GetStationIndex(train.RailwayId, train.TerminalStationId);
                                    if ((0 <= terminalStationIndex) &&
                                        IsIncluded(connector.StationIndexB, connector.StationIndexA, terminalStationIndex))
                                    {
                                        buffList.Add(new TrainViewModel(train, true, true));
                                    }
                                }
                            }
                            else if (train.FromStationId == connector.StationIdB)
                            {
                                if (train.ToStationId == connector.StationIdA)
                                {
                                    buffList.Add(new TrainViewModel(train, false, false));
                                }
                                else if (train.RailwayId == connector.RailwayId)
                                {
                                    var terminalStationIndex = GetStationIndex(train.RailwayId, train.TerminalStationId);
                                    if ((0 <= terminalStationIndex) &&
                                        IsIncluded(connector.StationIndexA, connector.StationIndexB, terminalStationIndex))
                                    {
                                        buffList.Add(new TrainViewModel(train, false, true));
                                    }
                                }
                            }
                        }

                        connector.Trains.Clear();
                        foreach (var buffItem in buffList.OrderBy(x => x.IsPhantom).ThenBy(x => x.IsFromA))
                        {
                            connector.Trains.Add(buffItem);
                        }
                    }

                    connector.UpdateContent(languageTag);
                }

                DelayedRailwayIds = trains
                                    .GroupBy(x => x.RailwayId)
                                    .Where(x => x.Any(y => 0 < y.Delay))
                                    .Select(x => x.First().RailwayId)
                                    .ToArray();
            }
        }