public override void ReplaceLineWithLink(string hash, TextElementBase linkedLine) { DeleteTextLine(hash); var newLink = new TextLink(this, hash, linkedLine.Language, linkedLine.Contributor, linkedLine.DateTime, linkedLine); _lines.Add(newLink); linkedLine.AddBacklink(newLink); }
public void UnLink(TextElementBase link) { if (link == null) { return; } _backlinks.RemoveAll(backlink => backlink.Target == link); }
public override string ToString(IEnumerable <TemplateVariable> vars) { TextElementBase temp = null; var builder = new StringBuilder(); if (Type == EntryType.SingleTranslated) { temp = _lines.GetFirstForLanguage(Language.NotSpecified); builder.AppendLine(Template.FillTemplate(temp.Value, vars, Language.NotSpecified)); } else if (Type == EntryType.Default) { // Получаем строковое представление для записи (все 3 языка) // Японская строка var language = Language.Jap; temp = _lines.GetPrefferedForLanguage(language); if (temp == null) { throw new ArgumentOutOfRangeException("Node MUST contain Japanese translation"); } builder.AppendLine(Template.FillTemplate(temp.Value, vars, language)); // Английская строка language = Language.Eng; temp = _lines.GetPrefferedForLanguage(language); if (temp != null) { // Английский перевод необязателен // Английская строчка скрипта - закомментирована (думать?) //var englishString = string.Format("//{0}", Template.FillTemplate(temp.Value, vars, language)); var englishString = string.Format("//{0}", temp.Value); builder.AppendLine(englishString); } // Русская строка language = Language.Rus; temp = _lines.GetPrefferedForLanguage(language); if (temp == null) { throw new ArgumentOutOfRangeException("Node MUST contain Russian translation"); } //builder.AppendLine(Template.FillTemplate(temp.Value, vars, language)); builder.AppendLine(temp.Value); } else { throw new ArgumentException("Unknown entry type!"); } //var line = temp != null ? Template.FillTemplate(temp.Value, vars, lang) : null; return(builder.ToString()); }
public void AddBacklink(TextElementBase link) { if (link == null) { return; } if (_backlinks.Where(backlink => backlink.Target == link).Any()) { return; } var temp = new Link(link.ParentEntry.Id, link.Hash, link); _backlinks.Add(temp); }
/// <summary> /// Обновляет ссылку. /// </summary> /// <param name="script">Весь скрипт (из мастер-файла)</param> /// <param name="lang">Данное значение необходимо для разрешения "висячих" ссылок. Такие ссылки /// указывают на строку с несуществующим хэшем. В таком случае ссылка проставляется на /// Preffered-узел для данного языка.</param> public void UpdateTarget(Script script, Language lang) { var entry = script.GetEntry(_targetId); var line = entry[_targetHash]; if (line != null) { _target = line; } else { _target = entry.EnumerateLines().GetPrefferedForLanguage(lang); //throw new NotImplementedException("Requested hash are not contained in entry specified."); } }
public override void AddTextLine(TextElementBase text) { if (text == null) { throw new ArgumentNullException(); } if (Type == EntryType.SingleTranslated) { if (text.Language != Language.NotSpecified) { throw new ArgumentOutOfRangeException("Can't add to single-translated entry line with specified language"); } } _lines.Add(text); }
public Link(int targetId, string targetHash, TextElementBase target) : this(targetId, targetHash) { _target = target; }
public TextLink(DataEntry parent, string hash, Language lang, string contributor, DateTime time, TextElementBase linkTo) : base(parent, hash, lang, contributor, time) { _linkedText = new Link(linkTo.ParentEntry.Id, linkTo.Hash, linkTo); }
public abstract void ReplaceLineWithLink(string hash, TextElementBase linkedLine);
public abstract void AddTextLine(TextElementBase text);
public override void ReplaceLineWithLink(string hash, TextElementBase linkedLine) { throw new NotSupportedException("Cant replace line from SingleTranslated Entry"); }
public override void AddTextLine(TextElementBase text) { throw new NotSupportedException(@"Cant add line to a Hidden-Entry type."); }