コード例 #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);
        }
コード例 #2
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);
            }
        }
コード例 #3
0
        /// <summary>
        /// Load the controls from the writing system, if it is not null. If it is null, clear all controls.
        /// If the combo boxes are not populated, do nothing...the method will get called again
        /// when the form loads.
        /// </summary>
        private void LoadControlsFromWritingSystem()
        {
            m_enableLangTagSideEffects = false;
            if (m_ws == null)
            {
                return;                 // Probably in design mode; can't populate.
            }
            m_origVariantSubtag = m_ws.VariantSubtag;
            m_origRegionSubtag  = m_ws.RegionSubtag;
            m_origScriptSubtag  = m_ws.ScriptSubtag;
            m_scriptName.ClearItems();
            m_scriptName.Items.AddRange(LangTagUtils.ScriptSubtags.ToArray());
            ScriptSubtag = m_origScriptSubtag;

            m_regionName.ClearItems();
            m_regionName.Items.AddRange(LangTagUtils.RegionSubtags.ToArray());
            RegionSubtag = m_origRegionSubtag;

            PopulateVariantCombo(false);
            VariantSubtag = m_origVariantSubtag;
            m_enableLangTagSideEffects = true;
        }
コード例 #4
0
        public bool CheckValid()
        {
            CheckDisposed();

            string caption = FwCoreDlgControls.kstidError;

            ScriptSubtag scriptSubtag = ScriptSubtag;

            // Can't allow a script name without an abbreviation.
            if (scriptSubtag == null && !string.IsNullOrEmpty(m_scriptName.Text.Trim()))
            {
                MessageBox.Show(FindForm(), FwCoreDlgControls.kstidMissingScrAbbr, caption);
                return(false);
            }
            if (scriptSubtag != null && scriptSubtag.IsPrivateUse)
            {
                if (!LangTagUtils.GetScriptSubtag(scriptSubtag.Code).IsPrivateUse)
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidDupScrAbbr, caption);
                    return(false);
                }
                if (!scriptSubtag.IsValid)
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidInvalidScrAbbr, caption);
                    return(false);
                }
            }

            RegionSubtag regionSubtag = RegionSubtag;

            // Can't allow a country name without an abbreviation.
            if (regionSubtag == null && !string.IsNullOrEmpty(m_regionName.Text.Trim()))
            {
                MessageBox.Show(FindForm(), FwCoreDlgControls.kstidMissingRgnAbbr, caption);
                return(false);
            }
            if (regionSubtag != null && regionSubtag.IsPrivateUse)
            {
                if (!LangTagUtils.GetRegionSubtag(regionSubtag.Code).IsPrivateUse)
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidDupRgnAbbr, caption);
                    return(false);
                }
                if (!regionSubtag.IsValid)
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidInvalidRgnAbbr, caption);
                    return(false);
                }
            }

            VariantSubtag variantSubtag = VariantSubtag;

            // Can't allow a variant name without an abbreviation.
            if (variantSubtag == null && !string.IsNullOrEmpty(m_variantName.Text.Trim()))
            {
                MessageBox.Show(FindForm(), FwCoreDlgControls.kstidMissingVarAbbr, caption);
                return(false);
            }
            if (variantSubtag != null && variantSubtag.IsPrivateUse)
            {
                if (!LangTagUtils.GetVariantSubtag(variantSubtag.Code).IsPrivateUse)
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidDupVarAbbr, caption);
                    return(false);
                }
                if (!variantSubtag.IsValid)
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidInvalidVarAbbr, caption);
                    return(false);
                }
            }
            if (variantSubtag != null)
            {
                var parts = variantSubtag.Code.Split('-').ToList();
                // If these subtags are private use, the first element of each must also be distinct.
                if (m_ws.LanguageSubtag.IsPrivateUse)
                {
                    parts.Add(m_ws.LanguageSubtag.Code.Split('-').First());
                }
                if (scriptSubtag != null && scriptSubtag.IsPrivateUse)
                {
                    parts.Add(scriptSubtag.Code.Split('-').First());
                }
                if (regionSubtag != null && regionSubtag.IsPrivateUse)
                {
                    parts.Add(regionSubtag.Code.Split('-').First());
                }
                var uniqueParts = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
                foreach (var part in parts)
                {
                    if (uniqueParts.Contains(part))
                    {
                        MessageBox.Show(FindForm(), String.Format(FwCoreDlgControls.kstidDuplicateParts, part), caption);
                        return(false);
                    }
                    uniqueParts.Add(part);
                }
            }

            return(true);
        }
コード例 #5
0
 /// <summary/>
 public ScriptListItem(ScriptSubtag script)
 {
     _script = script;
 }
コード例 #6
0
ファイル: ScriptSubtag.cs プロジェクト: jwickberg/libpalaso
		public ScriptSubtag(ScriptSubtag subtag, string name)
			: this(subtag.Code, name, subtag.IsPrivateUse)
		{
		}
コード例 #7
0
 /// <summary></summary>
 public IWritingSystem Create(LanguageSubtag languageSubtag, ScriptSubtag scriptSubtag, RegionSubtag regionSubtag, VariantSubtag variantSubtag)
 {
     throw new NotImplementedException();
 }
コード例 #8
0
 public ScriptSubtag(ScriptSubtag subtag, string name)
     : this(subtag.Code, name, subtag.IsPrivateUse, subtag.IsDeprecated)
 {
 }
コード例 #9
0
        /// <summary>
        /// Check that the contents of the control are valid. If not, report the error
        /// to the user and return false. This should prevent the user from closing the
        /// containing form using OK, but not from cancelling.
        /// </summary>
        public bool CheckValid()
        {
            CheckDisposed();

            string caption = FwCoreDlgControls.kstidError;

            ScriptSubtag scriptSubtag = ScriptSubtag;

            // Can't allow a script name without an abbreviation.
            if (scriptSubtag == null && !string.IsNullOrEmpty(m_scriptName.Text.Trim()))
            {
                MessageBox.Show(FindForm(), FwCoreDlgControls.kstidMissingScrAbbr, caption);
                return(false);
            }
            if (scriptSubtag != null && scriptSubtag.IsPrivateUse)
            {
                if (StandardSubtags.RegisteredScripts.Contains(scriptSubtag.Code))
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidDupScrAbbr, caption);
                    return(false);
                }
                if (!IetfLanguageTag.IsValidScriptCode(scriptSubtag.Code))
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidInvalidScrAbbr, caption);
                    return(false);
                }
            }

            RegionSubtag regionSubtag = RegionSubtag;

            // Can't allow a country name without an abbreviation.
            if (regionSubtag == null && !string.IsNullOrEmpty(m_regionName.Text.Trim()))
            {
                MessageBox.Show(FindForm(), FwCoreDlgControls.kstidMissingRgnAbbr, caption);
                return(false);
            }
            if (regionSubtag != null && regionSubtag.IsPrivateUse)
            {
                if (StandardSubtags.RegisteredRegions.Contains(regionSubtag.Code))
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidDupRgnAbbr, caption);
                    return(false);
                }
                if (!IetfLanguageTag.IsValidRegionCode(regionSubtag.Code))
                {
                    MessageBox.Show(FindForm(), FwCoreDlgControls.kstidInvalidRgnAbbr, caption);
                    return(false);
                }
            }

            VariantSubtag[] variantSubtags = VariantSubtags.ToArray();
            // Can't allow a variant name without an abbreviation.
            if (string.IsNullOrEmpty(m_variantAbbrev.Text.Trim()) && !string.IsNullOrEmpty(m_variantName.Text.Trim()))
            {
                MessageBox.Show(FindForm(), FwCoreDlgControls.kstidMissingVarAbbr, caption);
                return(false);
            }

            if (variantSubtags.Length > 0)
            {
                foreach (VariantSubtag variantSubtag in variantSubtags)
                {
                    if (variantSubtag.IsPrivateUse)
                    {
                        if (StandardSubtags.RegisteredVariants.Contains(variantSubtag.Code))
                        {
                            MessageBox.Show(FindForm(), FwCoreDlgControls.kstidDupVarAbbr, caption);
                            return(false);
                        }
                        if (!IetfLanguageTag.IsValidPrivateUseCode(variantSubtag.Code))
                        {
                            MessageBox.Show(FindForm(), FwCoreDlgControls.kstidInvalidVarAbbr, caption);
                            return(false);
                        }
                    }
                }

                List <string> parts = variantSubtags.Select(v => v.Code).ToList();
                // If these subtags are private use, the first element of each must also be distinct.
                if (m_ws.Language.IsPrivateUse)
                {
                    parts.Add(m_ws.Language.Code.Split('-').First());
                }
                if (scriptSubtag != null && scriptSubtag.IsPrivateUse)
                {
                    parts.Add(scriptSubtag.Code.Split('-').First());
                }
                if (regionSubtag != null && regionSubtag.IsPrivateUse)
                {
                    parts.Add(regionSubtag.Code.Split('-').First());
                }
                var uniqueParts = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
                foreach (string part in parts)
                {
                    if (uniqueParts.Contains(part))
                    {
                        MessageBox.Show(FindForm(), String.Format(FwCoreDlgControls.kstidDuplicateParts, part), caption);
                        return(false);
                    }
                    uniqueParts.Add(part);
                }
            }

            return(true);
        }