Example #1
0
        private TaskText LoadTaskText(XElement eText)
        {
            var text = new TaskText();

            LoadTaskText(eText, text);
            return(text);
        }
Example #2
0
        internal string RenderText(TaskText text, TaskRandom random, string[] settingLevel)
        {
            if (text == null)
            {
                return("");
            }
            string str = text.Text;

            var localVariables = new Dictionary <string, object>();

            // Random elements
            if (text.Randoms != null)
            {
                foreach (var rnd in text.Randoms)
                {
                    str = str.Replace($"%{rnd.Id}%", LevelCheck(rnd.Level, settingLevel)
                        ? GetRndValue(rnd, localVariables, random)?.ToString() : "");
                }
            }
            // Switches
            if (text.Switches != null)
            {
                foreach (var sw in text.Switches)
                {
                    str = str.Replace($"%{sw.Id}%", LevelCheck(sw.Level, settingLevel)
                        ? GetSwitchValue(sw, localVariables, random)?.ToString() : "");
                }
            }
            // Variables
            if (text.Variables != null)
            {
                foreach (var vr in text.Variables)
                {
                    str = str.Replace($"%{vr}%", GetVariable(vr, localVariables)?.ToString());
                }
            }

            // Check level for subelements
            if (str.Contains('<') && str.Contains(" level=\""))
            {
                var eText       = XElement.Parse($"<text>{str}</text>");
                var subElements = eText.Descendants().ToList();
                foreach (XElement el in subElements)
                {
                    if (el.Attribute("level") != null)
                    {
                        if (!LevelCheck(TaskLoader.ReadLevel(el), settingLevel))
                        {
                            el.Remove();
                        }
                    }
                }
                str = eText.InnerText();
            }

            // Hidden HTML tags (starts with '\', e.g. '\&lt;')
            str = str.EncodeEscapedHtmlTags();

            return(str);
        }
Example #3
0
        private TaskText LoadTaskText(XElement eText, TaskText text)
        {
            if (eText == null)
            {
                return(null);
            }
            text.Level        = ReadLevel(eText);
            text.ForRounds    = eText.Attribute("forRound")?.Value?.Split(',').Select(s => Convert.ToInt32(s)).ToArray();
            text.NotForRounds = eText.Attribute("notForRound")?.Value?.Split(',').Select(s => Convert.ToInt32(s)).ToArray();
            text.FromRound    = eText.GetAtt <int?>("fromRound", null);
            text.ToRound      = eText.GetAtt <int?>("toRound", null);
            text.Randoms      = new List <TaskRnd>();
            text.Switches     = new List <TaskSwitch>();
            text.Variables    = new List <string>();

            var subElements = eText.Descendants().ToList();

            //foreach (XElement el in subElements)
            for (int i = 0; i < subElements.Count; i++)
            {
                var el = subElements[i];
                if (el.Parent == null)
                {
                    continue;
                }
                // Randoms
                if (el.Name.ToString().ToLower().StartsWith("rnd") && el.Name.ToString().Length == 4)
                {
                    var rnd = LoadTaskRnd(el);
                    text.Randoms.Add(rnd);
                    if (!rnd.IsInMemoryOnly)
                    {
                        el.AddBeforeSelf($"%{rnd.Id}%");
                    }
                    RemoveElementFromList(subElements, el); i--;
                    el.Remove();
                }
                // Switches
                if (el.Name.ToString().ToLower() == "switch")
                {
                    var sw = LoadTaskSwitch(el);
                    text.Switches.Add(sw);
                    if (!sw.IsInMemoryOnly)
                    {
                        el.AddBeforeSelf($"%{sw.Id}%");
                    }
                    RemoveElementFromList(subElements, el); i--;
                    el.Remove();
                }
                // Variables
                if (el.Name.ToString().ToLower() == "var")
                {
                    string varId = el.GetAtt("id", String.Empty);
                    el.AddBeforeSelf($"%{varId}%");
                    if (!text.Variables.Contains(varId))
                    {
                        text.Variables.Add(varId);
                    }
                    RemoveElementFromList(subElements, el); i--;
                    el.Remove();
                }
            }
            // Remove Ids added in Randoms or Switches
            text.Variables.RemoveAll(x => text.Randoms.Any(y => y.Id == x) || text.Switches.Any(y => y.Id == x));

            text.Text = eText.InnerText();
            return(text);
        }
Example #4
0
 private void RenderText(TaskText text)
 {
     output.AppendLine(RenderText(text, random.GetSubRandom(), Setting.Level));
 }