text: public virtual SpatialArgs Parse(string v, SpatialContext ctx){int idx = v.IndexOf('(');int edx = v.LastIndexOf(')');if (idx < 0 || idx > edx){throw new ParseException("missing parens: " + v, -1);}SpatialOperation op = SpatialOperation.Get(v.Substring(0, idx - 0).Trim());string body = v.Substring(idx + 1, edx - (idx + 1)).Trim();if (body.Length < 1){throw new ParseException("missing body : " + v, idx + 1);}var shape = ParseShape(body, ctx);var args = NewSpatialArgs(op, shape);if (v.Length > (edx + 1)){body = v.Substring(edx + 1).Trim();if (body.Length > 0){IDictionary<string, string> aa = ParseMap(body);ReadNameValuePairs(args, aa);if (!aa.Any()){throw new ArgumentException("unused parameters: " + aa);}}}args.Validate();return args;}