/// <summary> /// To pack string argument in object. /// </summary> /// <param name="arg">Argument for packing.</param> /// <returns></returns> public static object packArgument(object arg) { if (arg == null) { return(null); } if (!(arg is string) || String.IsNullOrWhiteSpace((string)arg)) { return(arg); } SNode.IPM pm = new SNode.PM(String.Format("_({0})", arg)); SNode.Argument first = pm.FirstLevel.Args[0]; if (first.type != SNode.ArgumentType.Object) { return(arg); } return(extract((SNode.Argument[])first.data)); }
/// <summary> /// Extracts all arguments from line. /// </summary> /// <param name="data">Raw line with user arguments.</param> /// <returns>List of parsed arguments or null value if data is empty.</returns> /// <exception cref="SyntaxIncorrectException">If incorrect arguments line.</exception> protected Argument[] extractArgs(string data) { if(String.IsNullOrWhiteSpace(data)) { return new Argument[0]; } StringHandler h = new StringHandler(); string[] raw = h.protectMixedQuotes(data).Split(','); Argument[] ret = new Argument[raw.Length]; for(int i = 0; i < raw.Length; ++i) { string arg = h.recovery(raw[i]).Trim(); if(arg.Length < 1) { throw new SyntaxIncorrectException("PM - extractArgs: incorrect arguments line '{0}'", data); } ret[i] = detectArgument(arg); } return ret; }