private MultiScript CreateMultiScript(params string[] lines) { // Creates a new MultiScript with mock IScripts, with .Line returning each // line passed in as a parameter. List<IScript> source = new List<IScript>(); foreach (string line in lines) { var script = new Mock<IScript>(); script.Setup(s => s.Line).Returns(line); source.Add(script.Object); } MultiScript result = new MultiScript(source.ToArray()); result.UndoLog = m_worldModel.UndoLogger; return result; }
public IScript CreateScript(string line, Element proc) { string remainingScript; IScript newScript; MultiScript result = new MultiScript(); bool finished = false; IScript lastIf = null; bool dontAdd; bool addedError; IfScriptConstructor ifConstructor = null; line = Utility.RemoveSurroundingBraces(line); while (!finished) { line = Utility.GetScript(line, out remainingScript); if (line != null) { line = line.Trim(); line = Utility.RemoveComments(line); } if (!string.IsNullOrEmpty(line)) { newScript = null; dontAdd = false; addedError = false; if (lastIf != null && line.StartsWith("else")) { if (line.StartsWith("else if")) { ifConstructor.AddElseIf(lastIf, line, proc); } else { ifConstructor.AddElse(lastIf, line, proc); } dontAdd = true; } else { lastIf = null; IScriptConstructor constructor = GetScriptConstructor(line); if (constructor != null) { try { newScript = constructor.Create(line, proc); if (constructor.Keyword == "if") { ifConstructor = (IfScriptConstructor)constructor; lastIf = newScript; } } catch (Ciloci.Flee.ExpressionCompileException ex) { AddError(string.Format("Error compiling expression in '{0}': {1}", line, ex.Message)); addedError = true; } catch (Exception ex) { AddError(string.Format("Error adding script '{0}': {1}", line, ex.Message)); addedError = true; } } if (newScript == null) { // See if the script is like "myvar = 2". newScript will be null otherwise. newScript = m_setConstructor.Create(line, proc); } if (newScript == null) { // See if the script calls a procedure defined by the game newScript = m_procConstructor.Create(line, proc); } } if (!dontAdd) { if (newScript == null) { if (!addedError) AddError(string.Format("Unrecognised script command '{0}'", line)); } else { newScript.Line = line; result.Add(newScript); } } } line = remainingScript; if (string.IsNullOrEmpty(line)) finished = true; } return result; }
private string GetLinesString(MultiScript multiScript) { return string.Join(";", multiScript.Scripts.Select(s => s.Line)); }
public void AddElseIf() { IScript newScript = new MultiScript(); IfScript.ElseIfScript newElseIf = m_ifScript.AddElseIf(string.Empty, newScript); }
public void AddElse() { IScript newScript = new MultiScript(); m_ifScript.SetElse(newScript); }
public UndoMultiScriptAddRemove(MultiScript appliesTo, IScript script, bool isAdd, int? index) { m_appliesTo = appliesTo; m_script = script; m_isAdd = isAdd; m_index = index; }
protected override ScriptBase CloneScript() { MultiScript clone = new MultiScript(); clone.m_scripts = new List<IScript>(); foreach (IScript script in m_scripts) { IScript clonedScript = (IScript)script.Clone(); clonedScript.Parent = clone; clone.m_scripts.Add(clonedScript); } return clone; }
private void InitialiseMultiScript(MultiScript script) { System.Diagnostics.Debug.Assert(m_underlyingScript == null); m_underlyingScript = script; m_underlyingScript.ScriptUpdated += multiScript_ScriptUpdated; m_underlyingScript.UndoLog = m_controller.WorldModel.UndoLogger; }