/// <summary>
        /// Updates the source.
        /// </summary>
        /// <param name="table">The table.</param>
        public void UpdateSource(translationTextTable table = null)
        {
            List <BibTexEntryTag> _tags = new List <BibTexEntryTag>();

            foreach (var pair in Tags)
            {
                if (table != null)
                {
                    pair.Value.source = table.translate(pair.Value.Value, true);
                }
                _tags.Add(pair.Value);
            }

            Tags.Clear();
            foreach (var t in _tags)
            {
                AddTag(t.Key, t);
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("@" + type + "{" + Key + ",");

            Int32 c = 0;

            foreach (var pair in Tags)
            {
                String format = tagFormatOther;

                if (pair.Key == tagKey_Title)
                {
                    format = tagFormatTitle;
                }

                String line = "";

                if (table != null)
                {
                    line = String.Format(format, pair.Key, pair.Value.source);
                }
                else
                {
                    line = String.Format(format, pair.Key, pair.Value.Value);
                }

                sb.AppendLine(line);

                c++;
                if (c < Tags.Count)
                {
                    sb.Append(",");
                }
            }
            sb.AppendLine("}");

            source = sb.ToString();
        }
 /// <summary>
 /// Processes the source.
 /// </summary>
 /// <param name="table">The table.</param>
 public void ProcessSource(translationTextTable table = null)
 {
     if (table == null)
     {
         return;
     }
     foreach (var pair in Tags)
     {
         pair.Value.Value = table.translate(pair.Value.source);
     }
 }