private static ScriptingValue PrimitiveConcat(ScriptingValue[] arguments) { object a = arguments[0].Value; object b = arguments[1].Value; if (a is string && b is string) { return(ScriptingValue.CreateValue(((IConvertible)a).ToString(CultureInfo.InvariantCulture) + ((IConvertible)b).ToString(CultureInfo.InvariantCulture))); } else { return(ScriptingValue.CreateArray(arguments[0].Concat(arguments[1]).ToArray())); } }
// reg_find pattern string private static ScriptingValue RegFind(ScriptingValue[] arguments) { string p = (string)arguments[0].Value; string s = (string)arguments[1].Value; Match match = new Regex(p).Match(s); if (match.Success) { return(ScriptingValue.CreateArray(match.Index, match.Value)); } else { return(ScriptingValue.CreateArray(-1, "")); } }
// read_file file_name private static ScriptingValue ReadFile(ScriptingValue[] arguments) { string filename = (string)arguments[0].Value; try { using (StreamReader reader = new StreamReader(filename, true)) { return(ScriptingValue.CreateValue(reader.ReadToEnd())); } } catch (Exception) { return(ScriptingValue.CreateArray(new object[] { })); } }
// reg_find_all pattern string private static ScriptingValue RegFindAll(ScriptingValue[] arguments) { Regex p = new Regex((string)arguments[0].Value); string s = (string)arguments[1].Value; int index = 0; List <object[]> result = new List <object[]>(); while (index < s.Length) { Match match = p.Match(s, index); if (match.Success) { result.Add(new object[] { match.Index, match.Value }); index = match.Index + match.Length; } else { break; } } return(ScriptingValue.CreateArray(result.Cast <object>().ToArray())); }
// find_all pattern string private static ScriptingValue FindAll(ScriptingValue[] arguments) { string p = (string)arguments[0].Value; string s = (string)arguments[1].Value; int index = 0; List <int> result = new List <int>(); while (index < s.Length) { int pos = s.IndexOf(p, index, StringComparison.CurrentCulture); if (pos == -1) { break; } else { result.Add(pos); index = pos + p.Length; } } return(ScriptingValue.CreateArray(result.Cast <object>().ToArray())); }
// zip list2 list1 private static ScriptingValue Zip(ScriptingValue[] arguments) { return(ScriptingValue.CreateArray(arguments[1].Zip(arguments[0], (a, b) => ScriptingValue.CreateArray(a, b)).ToArray())); }
// where predicate list private static ScriptingValue Where(ScriptingValue[] arguments) { return(ScriptingValue.CreateArray(arguments[1].Where(v => (bool)arguments[0].Invoke(v).Value).ToArray())); }
// union list2 list1 private static ScriptingValue Union(ScriptingValue[] arguments) { return(ScriptingValue.CreateArray(arguments[1].Union(arguments[0], new ScriptingValueComparer()).ToArray())); }
// take number list private static ScriptingValue Take(ScriptingValue[] arguments) { return(ScriptingValue.CreateArray(arguments[1].Take((int)arguments[0].Value).ToArray())); }
// select_many converter list private static ScriptingValue SelectMany(ScriptingValue[] arguments) { return(ScriptingValue.CreateArray(arguments[1].SelectMany(v => arguments[0].Invoke(v)).ToArray())); }
// reverse list private static ScriptingValue Reverse(ScriptingValue[] arguments) { return(ScriptingValue.CreateArray(arguments[0].Reverse().ToArray())); }
// order_by converter list private static ScriptingValue OrderBy(ScriptingValue[] arguments) { return(ScriptingValue.CreateArray(arguments[1].OrderBy(s => arguments[0].Invoke(s), new ScriptingValueComparer()).ToArray())); }
// distinct list private static ScriptingValue Distinct(ScriptingValue[] arguments) { return(ScriptingValue.CreateArray(arguments[0].Distinct(new ScriptingValueComparer()).ToArray())); }