예제 #1
0
파일: DataEntry.cs 프로젝트: fxMem/FBU
        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);
        }
예제 #2
0
        public void UnLink(TextElementBase link)
        {
            if (link == null)
            {
                return;
            }

            _backlinks.RemoveAll(backlink => backlink.Target == link);
        }
예제 #3
0
파일: DataEntry.cs 프로젝트: fxMem/FBU
        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());
        }
예제 #4
0
        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);
        }
예제 #5
0
        /// <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.");
            }
        }
예제 #6
0
파일: DataEntry.cs 프로젝트: fxMem/FBU
        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);
        }
예제 #7
0
 public Link(int targetId, string targetHash, TextElementBase target)
     : this(targetId, targetHash)
 {
     _target = target;
 }
예제 #8
0
 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);
 }
예제 #9
0
파일: DataEntry.cs 프로젝트: fxMem/FBU
 public abstract void ReplaceLineWithLink(string hash, TextElementBase linkedLine);
예제 #10
0
파일: DataEntry.cs 프로젝트: fxMem/FBU
 public abstract void AddTextLine(TextElementBase text);
예제 #11
0
파일: DataEntry.cs 프로젝트: fxMem/FBU
 public override void ReplaceLineWithLink(string hash, TextElementBase linkedLine)
 {
     throw new NotSupportedException("Cant replace line from SingleTranslated Entry");
 }
예제 #12
0
파일: DataEntry.cs 프로젝트: fxMem/FBU
 public override void AddTextLine(TextElementBase text)
 {
     throw new NotSupportedException(@"Cant add line to a Hidden-Entry type.");
 }