Example #1
0
        public static string GetExtension(this ConverterType converterType)
        {
            switch (converterType)
            {
            case ConverterType.Latex:
                return(".tex");

            case ConverterType.Markdown:
                return(".md");

            case ConverterType.Undefined:
            case ConverterType.Text:
                return(".txt");

            default:
                return("." + converterType.ToString().ToLower());
            }
        }
Example #2
0
        public static IEnumerable <MultipartFormParameter> ApiParameter(ConverterType from, ConverterType to, string template, string csl)
        {
            if (from != ConverterType.Undefined)
            {
                yield return(CreateField("from", from.ToString().ToLower()));

                yield return(CreateField("ext", from.GetExtension()));
            }
            if (to != ConverterType.Undefined)
            {
                yield return(CreateField("to", to.ToString().ToLower()));
            }
            if (!string.IsNullOrWhiteSpace(template))
            {
                yield return(CreateField("template", template));
            }
            if (!string.IsNullOrWhiteSpace(csl))
            {
                yield return(CreateField("csl", csl));
            }
        }
Example #3
0
        public override IScriptCommand Execute(IParameterDic pm)
        {
            Func <object, object> checkParameters = p =>
            {
                if (p is string)
                {
                    string pString = p as string;
                    if (pString.StartsWith("{") && pString.EndsWith("}"))
                    {
                        return(pm.Get(pString));
                    }
                }
                return(p);
            };

            switch (ConverterType)
            {
            case ValueConverterType.GetArrayItem:
                Int32 id = ConverterParameter.Count() > 0 ? Int32.Parse(ConverterParameter.First().ToString()) : -1;
                if (id == -1)
                {
                    return(ResultCommand.Error(new KeyNotFoundException()));
                }
                Value = (Func <Object, Object>)(v => (v as Array).GetValue(id));
                break;

            case ValueConverterType.GetProperty:
                string property = ConverterParameter.Count() > 0 ? ConverterParameter.First() as string : null;
                Func <Object, Object> retVal = String.IsNullOrEmpty(property) ?
                                               (Func <Object, Object>)(v => v) :
                                               (Func <Object, Object>)(v =>
                {
                    var typeInfo     = v is Array ? typeof(Array).GetTypeInfo() : v.GetType().GetTypeInfo();
                    var propertyInfo = typeInfo.GetPropertyInfoRecursive(property);
                    if (propertyInfo == null)
                    {
                        var fieldInfo = typeInfo.GetFieldInfoRecursive(property);

                        if (fieldInfo == null)
                        {
                            throw new KeyNotFoundException(String.Format("{0} cannot be found in {1}", property, v.GetType()));
                        }
                        else
                        {
                            return(fieldInfo.GetValue(v));
                        }
                    }
                    else
                    {
                        return(propertyInfo.GetValue(v));
                    }
                });
                Value = retVal;


                break;

            case ValueConverterType.SetProperty:
                string property1 = ConverterParameter.Count() > 0 ? ConverterParameter.First() as string : null;
                Action <Object, Object> retVal1 = String.IsNullOrEmpty(property1) ?
                                                  (Action <Object, Object>)((o, v) => { }) :
                                                  (Action <Object, Object>)((o, v) =>
                {
                    if (o == null)
                    {
                        return;
                    }
                    var typeInfo     = o is Array ? typeof(Array).GetTypeInfo() : o.GetType().GetTypeInfo();
                    var propertyInfo = typeInfo.GetPropertyInfoRecursive(property1);
                    if (propertyInfo == null)
                    {
                        var fieldInfo = typeInfo.GetFieldInfoRecursive(property1);

                        if (fieldInfo == null)
                        {
                            logger.Error(String.Format("{0} cannot be found in {1}", property1, o.GetType()));
                        }
                        else
                        {
                            fieldInfo.SetValue(o, v);
                        }
                    }
                    else
                    {
                        propertyInfo.SetValue(o, v);
                    }
                });
                Value = retVal1;
                break;

            case ValueConverterType.ExecuteMethod:
                string methodName = ConverterParameter.Count() > 0 ? ConverterParameter.First() as string : null;


                object[] methodParameters = ConverterParameter.Skip(1)
                                            .Select(param => checkParameters(param))
                                            .ToArray();
                Func <MethodInfo, bool> matchParametrers = (pi) =>
                {
                    if (pi.GetParameters().Length == methodParameters.Length)
                    {
                        //var parameters = pi.GetParameters();

                        //for (int i = 0; i < methodParameters.Length; i++)
                        //{
                        //    if (!(parameters[i].ParameterType
                        //    .IsAssignableFrom(methodParameters[i].GetType())))
                        //        return false;
                        //}
                        return(true);
                    }
                    return(false);
                };

                Func <Object, Object> retVa1l = String.IsNullOrEmpty(methodName) ?
                                                (Func <Object, Object>)(v => v) :
                                                (Func <Object, Object>)(v =>
                {
                    var typeInfo   = v is Array ? typeof(Array).GetTypeInfo() : v.GetType().GetTypeInfo();
                    var methodInfo = typeInfo.DeclaredMethods
                                     .FirstOrDefault(
                        pi =>
                        pi.Name.Equals(methodName, StringComparison.CurrentCultureIgnoreCase) &&
                        matchParametrers(pi));
                    if (methodInfo == null)
                    {
                        throw new KeyNotFoundException(methodName);
                    }

                    else
                    {
                        return(methodInfo.Invoke(v, methodParameters));
                    }
                });
                Value = retVa1l;

                break;

            case ValueConverterType.AddValue:
                Func <Object, Object> retVa12 = (Func <Object, Object>)(v =>
                {
                    var mInfo = typeof(FileExplorer.Utils.ExpressionUtils)
                                .GetRuntimeMethods().First(m => m.Name == "Add")
                                .MakeGenericMethod(v.GetType());
                    foreach (var addItem in ConverterParameter.Select(p => checkParameters(p)).ToArray())
                    {
                        v = mInfo.Invoke(null, new object[] { v, addItem });
                    }
                    return(v);
                });
                Value = retVa12;
                break;

            case ValueConverterType.ConcatArray:

                Func <Object, Object> retVa13 = (Func <Object, Object>)(v =>
                {
                    var parameters = ConverterParameter.Select(p => checkParameters(p)).ToArray();
                    if (v == null)
                    {
                        v = Array.CreateInstance(parameters.First().GetType(), new int[] { 0 });
                    }

                    List <object> items2Add = new List <object>();
                    foreach (var item in parameters)
                    {
                        if (item is Array)
                        {
                            items2Add.AddRange((item as Array).Cast <object>());
                        }
                        else
                        {
                            items2Add.Add(item);
                        }
                    }

                    Array array    = v as Array;
                    Type arrayType = array.GetType().GetElementType();
                    Array newArray = Array.CreateInstance(arrayType, array.Length + items2Add.Count());
                    Array.Copy(array, 0, newArray, 0, array.Length);
                    Array.Copy(items2Add.ToArray(), 0, newArray, array.Length, items2Add.Count());
                    return(newArray);
                });
                Value = retVa13;

                break;
            //case ValueConverterType.SubString:
            //    Func<Object, Object> retVa14 = (Func<Object, Object>)(v =>
            //       {
            //           if (ConverterParameter.Length != 2)
            //               return ResultCommand.Error(new ArgumentException("Incorrect number of parameters (2)."));
            //           var parameters = ConverterParameter.Select(p => checkParameters(p)).ToArray();

            //           int startIdx = (int)parameters[0];
            //           int? length = (int?)parameters[1];

            //           string str = v as string;
            //           return length.HasValue ? str.Substring(startIdx, length.Value) : str.Substring(startIdx);
            //       });
            //    Value = retVa14;
            //    break;
            default: return(ResultCommand.Error(new NotSupportedException(ConverterType.ToString())));
            }

            return(base.Execute(pm));
        }