Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 public Template(IMacroElement el = null, MacroTable table = null, Context c = null)
 {
     aggregate  = el;
     macroTable = table;
     context    = c;
 }
Exemplo n.º 5
0
 public void Remove(IMacroElement el)
 {
     children.RemoveAll(x => x.Equals(el));
 }
Exemplo n.º 6
0
 public void Add(IMacroElement el)
 {
     children.Add(el);
 }