private static bool ResolveDirective(VPPDirective directive, List <VPPMakro> makros, VPPTextParser parser) { parser.SetPosition(0); int idx; bool resolved = false; while ((idx = parser.Seek(directive.DirectiveName)) != -1) { parser.Eat(directive.DirectiveName); if (!parser.IsValidPreWordCharacter(idx - 1) || !parser.IsValidPostWordCharacter(idx + directive.DirectiveName.Length)) { continue; } parser.EatWhiteSpace(); if (parser.Is('(')) { parser.Eat('('); List <string> p = ParseList(parser, x => x.Is(')')); int end = parser.Eat(')'); parser.SetPosition(idx); parser.Remove(end + 1 - idx); if (directive.ResolveParameters) { for (int i = 0; i < p.Count; i++) { VPPTextParser arg = new VPPTextParser(p[i]); while (ResolveMakros(arg, makros)) { } p[i] = arg.ToString(); } } string resolvedString = directive.Resolve(makros, parser, p.ToArray()); parser.Insert(resolvedString); } else { parser.SetPosition(idx); parser.Remove(directive.DirectiveName.Length); parser.Insert(directive.Resolve(makros, parser, new string[0])); } resolved = true; } return(resolved); }
public override string GenerateValue(string[] args) { if (Parameters.Count == 0) { return(Value); } string v = Value; VPPTextParser parser = new VPPTextParser(v); for (int i = 0; i < Parameters.Count; i++) { ApplyParameter(parser, Parameters[i], args[i]); } return(parser.ToString()); }