private TaskText LoadTaskText(XElement eText) { var text = new TaskText(); LoadTaskText(eText, text); return(text); }
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. '\<') str = str.EncodeEscapedHtmlTags(); return(str); }
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); }
private void RenderText(TaskText text) { output.AppendLine(RenderText(text, random.GetSubRandom(), Setting.Level)); }