public override ProgNodeValue Evaluate(ProgNodeContext context, ArgList arguments) { string value = arguments.GetString(context, 0); int start = arguments.GetInteger(context, 1); string substring = null; switch (arguments.Size()) { case 2: substring = value.Substring(start); break; case 3: int length = arguments.GetInteger(context, 2); substring = value.Substring(start, length); break; } return(new ProgNodeValue(substring)); }