public IMacroElement Parse(ref StringBuilder source) { IMacroElement toReturn = null; int index = GetFirstOuterElemPosition(source); string buf = source.ToString(); string name = buf.Substring(1, buf.IndexOf('(') - 1); string variableList = buf.Substring(buf.IndexOf('(') + 1, buf.IndexOf(')') - (buf.IndexOf('(') + 1)); Dictionary <string, string> replaced = LogicManager.GetStringReplacers(ref variableList, 0, variableList.Length); List <string> variables = variableList.Split(' ').ToList(); variables.RemoveAll(x => x == ""); foreach (var kvp in replaced) { for (int i = 0; i < variables.Count; ++i) { if (variables[i] == kvp.Key) { variables[i] = kvp.Value; } } } source = new StringBuilder(buf.Substring(index)); toReturn = new MacroCall(name, variables.ToArray()); return(toReturn); }
public IMacroElement Parse(ref StringBuilder source) { IMacroElement toReturn = null; int index = GetTerminator(source); if (index != -1) { string buf = source.ToString(); string variable = buf.Substring(1, index - 1); // omit $ List <string> parts = variable.Split('.').ToList(); parts.RemoveAll(x => x == ""); string name = parts[0]; if (parts.Count > 1) { parts = parts.Skip(1).ToList(); } else { parts = null; } toReturn = new VariableMacro(name, parts); source = new StringBuilder(buf.Substring(index)); } else { string buf = source.ToString(); string variable = buf.Substring(1); // omit $ List <string> parts = variable.Split('.').ToList(); parts.RemoveAll(x => x == ""); string name = parts[0]; if (parts.Count > 1) { parts = parts.Skip(1).ToList(); } else { parts = null; } toReturn = new VariableMacro(name, parts); source = new StringBuilder(); } return(toReturn); }
public IMacroElement Parse(ref StringBuilder source) { IMacroElement toReturn = null; int last_index = GetNextControlSymbol(source); if (last_index != -1) { string buf = source.ToString(); toReturn = new PlainTextMacro(buf.Substring(0, last_index)); source = new StringBuilder(buf.Substring(last_index)); } else { toReturn = new PlainTextMacro(source.ToString()); source = new StringBuilder(); } return(toReturn); }
public Template(IMacroElement el = null, MacroTable table = null, Context c = null) { aggregate = el; macroTable = table; context = c; }
public void Remove(IMacroElement el) { children.RemoveAll(x => x.Equals(el)); }
public void Add(IMacroElement el) { children.Add(el); }