예제 #1
0
        public void SetAlternative(string writingSystemId, string form)
        {
            Debug.Assert(!string.IsNullOrEmpty(writingSystemId), "The writing system id was empty.");
            Debug.Assert(writingSystemId.Trim() == writingSystemId,
                         "The writing system id had leading or trailing whitespace");

            //enhance: check to see if there has actually been a change

            LanguageForm alt = Find(writingSystemId);

            if (string.IsNullOrEmpty(form))             // we don't use space to store empty strings.
            {
                if (alt != null && !alt.IsStarred)
                {
                    RemoveLanguageForm(alt);
                }
            }
            else
            {
                if (alt != null)
                {
                    alt.Form = form;
                }
                else
                {
                    AddLanguageForm(new LanguageForm(writingSystemId, form, this));
                }
            }

            NotifyPropertyChanged(writingSystemId);
        }
예제 #2
0
        public void SetAnnotationOfAlternativeIsStarred(string id, bool isStarred)
        {
            LanguageForm alt = Find(id);

            if (isStarred)
            {
                if (alt == null)
                {
                    AddLanguageForm(new LanguageForm(id, String.Empty, this));
                    alt = Find(id);
                    Debug.Assert(alt != null);
                }
                alt.IsStarred = true;
            }
            else
            {
                if (alt != null)
                {
                    if (alt.Form == String.Empty)                     //non-starred and empty? Nuke it.
                    {
                        RemoveLanguageForm(alt);
                    }
                    else
                    {
                        alt.IsStarred = false;
                    }
                }
                else
                {
                    //nothing to do.  Missing altertive == not starred.
                }
            }
            NotifyPropertyChanged(id);
        }
예제 #3
0
        /// <summary>
        /// Get a string out
        /// </summary>
        /// <returns>the string of the requested id if it exists,
        /// else the 'first'(?) one that does exist + the suffix,
        /// else the given suffix </returns>
        private string GetAlternative(string writingSystemId, bool doShowSomethingElseIfMissing,
                                      string notFirstChoiceSuffix)
        {
            LanguageForm alt = Find(writingSystemId);

            if (null == alt)
            {
                if (doShowSomethingElseIfMissing)
                {
                    return(GetFirstAlternative() + notFirstChoiceSuffix);
                }
                else
                {
                    return(string.Empty);
                }
            }
            string form = alt.Form;

            if (form == null || (form.Trim().Length == 0))
            {
                if (doShowSomethingElseIfMissing)
                {
                    return(GetFirstAlternative() + notFirstChoiceSuffix);
                }
                else
                {
                    return(string.Empty);
                }
            }
            else
            {
                return(form);
            }
        }
예제 #4
0
        public bool GetAnnotationOfAlternativeIsStarred(string id)
        {
            LanguageForm alt = Find(id);

            if (alt == null)
            {
                return(false);
            }
            return(alt.IsStarred);
        }
예제 #5
0
        public string GetBestAlternativeString(IEnumerable <string> orderedListOfWritingSystemIds)
        {
            LanguageForm form = GetBestAlternative(orderedListOfWritingSystemIds);

            if (form == null)
            {
                return(string.Empty);
            }
            return(form.Form);
        }
예제 #6
0
 public bool ContainsEqualForm(LanguageForm other)
 {
     foreach (LanguageForm form in Forms)
     {
         if (other.Equals(form))
         {
             return(true);
         }
     }
     return(false);
 }
예제 #7
0
        protected void AddLanguageForm(LanguageForm languageForm)
        {
            LanguageForm[] forms = new LanguageForm[Forms.Length + 1];
            for (int i = 0; i < Forms.Length; i++)
            {
                forms[i] = Forms[i];
            }

            //actually copy the contents, as we must now be the parent
            forms[Forms.Length] = new LanguageForm(languageForm, this);
            Array.Sort(forms);
            _forms = forms;
        }
예제 #8
0
        /// <summary>
        /// Gets the Spans for the exact alternative or null.
        /// </summary>
        public List <LanguageForm.FormatSpan> GetExactAlternativeSpans(string writingSystemId)
        {
            LanguageForm alt = Find(writingSystemId);

            if (null == alt)
            {
                return(null);
            }
            else
            {
                return(alt.Spans);
            }
        }
예제 #9
0
        public LanguageForm[] GetOrderedAndFilteredForms(IEnumerable <string> writingSystemIdsInOrder)
        {
            List <LanguageForm> forms = new List <LanguageForm>();

            foreach (string id in writingSystemIdsInOrder)
            {
                LanguageForm form = Find(id);
                if (form != null)
                {
                    forms.Add(form);
                }
            }
            return(forms.ToArray());
        }
예제 #10
0
 public void RemoveLanguageForm(LanguageForm languageForm)
 {
     Debug.Assert(Forms.Length > 0);
     LanguageForm[] forms = new LanguageForm[Forms.Length - 1];
     for (int i = 0, j = 0; i < forms.Length; i++, j++)
     {
         if (Forms[j] == languageForm)
         {
             j++;
         }
         forms[i] = Forms[j];
     }
     _forms = forms;
 }
예제 #11
0
 public void MergeIn(MultiTextBase incoming)
 {
     foreach (LanguageForm form in incoming)
     {
         LanguageForm f = Find(form.WritingSystemId);
         if (f != null)
         {
             f.Form = form.Form;
         }
         else
         {
             AddLanguageForm(form);                     //this actually copies the meat of the form
         }
     }
 }
예제 #12
0
 protected static void CopyForms(Dictionary <string, string> forms, MultiTextBase m)
 {
     if (forms != null && forms.Keys != null)
     {
         foreach (string key in forms.Keys)
         {
             LanguageForm f = m.Find(key);
             if (f != null)
             {
                 f.Form = forms[key];
             }
             else
             {
                 m.SetAlternative(key, forms[key]);
             }
         }
     }
 }
예제 #13
0
        /// <summary>
        /// Try to get an alternative according to the ws's given(e.g. the enabled writing systems for a field)
        /// </summary>
        /// <param name="orderedListOfWritingSystemIds"></param>
        /// <returns>May return null!</returns>
        public LanguageForm GetBestAlternative(IEnumerable <string> orderedListOfWritingSystemIds)
        {
            foreach (string id in orderedListOfWritingSystemIds)
            {
                LanguageForm alt = Find(id);
                if (null != alt)
                {
                    return(alt);
                }
            }

//            //just send back an empty
//            foreach (string id in orderedListOfWritingSystemIds)
//            {
//                return new LanguageForm(id, string.Empty );
//            }
            return(null);
        }