Пример #1
0
        public override IPyValue TranslateToPython(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (src.MethodInfo.DeclaringType == typeof(Console))
            {
                var info = MapNamedParameters(src);

                if (src.MethodInfo.Name == nameof(Console.WriteLine))
                {
                    if (info.MethodParameters.Length == 1)
                    {
                        var v      = ctx.TranslateValue(info.CallArguments[0].MyValue);
                        var result = new PyMethodCallExpression(null, "print", v);
                        // In Python 3, print is a function, whereas it used to be a statement in previous versions.

                        /*
                         * result.OnSkipBracketRequest += (mce, args) =>
                         * {
                         *  args.CanSkipBrackets = GeneralRulesForMetodBrackets.Bla(mce);
                         * };
                         */
                        return(result);
                    }
                }

                var mn = src.MethodInfo.ToString();
                throw new NotImplementedException(mn);
            }

            return(null);
        }
Пример #2
0
        private static IPhpValue Try_UseExpressionAttribute(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            var ats = src.MethodInfo.GetCustomAttribute <UseBinaryExpressionAttribute>(true);

            if (ats == null)
            {
                return(null);
            }
            IPhpValue l, r;
            var       re = new Regex("^\\s*\\$(\\d+)\\s*$");
            var       m  = re.Match(ats.Left);

            if (m.Success)
            {
                l = ctx.TranslateValue(src.Arguments[int.Parse(m.Groups[1].Value)].MyValue);
            }
            else
            {
                l = PhpValueTranslator.GetValueForExpression(null, ats.Left);
            }

            m = re.Match(ats.Right);
            if (m.Success)
            {
                r = ctx.TranslateValue(src.Arguments[int.Parse(m.Groups[1].Value)].MyValue);
            }
            else
            {
                r = PhpValueTranslator.GetValueForExpression(null, ats.Right);
            }
            var method = new PhpBinaryOperatorExpression(ats.Operator, l, r);

            return(method);
        }
Пример #3
0
        private static IPhpValue _FilterInputServer(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            var mn = src.MethodInfo.Name;
            var fn = src.MethodInfo.ToString();

            if (fn == "System.String ValidateIp(Lang.Php.Filters.ServerVariables, Lang.Php.Filters.IpFlags, Lang.Php.Filters.IpOptions)")
            {
                var filter = KnownFilters.FilterValidateIp;
                var result = MakeFilter(ctx, src, filter);
                return(result);
            }
            if (fn == "Boolean ValidateBoolean(Lang.Php.Filters.ServerVariables, Boolean)")
            {
                return(Make_FilterInput(
                           new PhpConstValue(FilterInput.Type.Server),
                           ctx.TranslateValue(src.Arguments[0]),
                           FILTER_VALIDATE_BOOLEAN,
                           PhpArrayCreateExpression.MakeKeyValue(new PhpConstValue("default"), ctx.TranslateValue(src.Arguments[1].MyValue))
                           ));
            }
            if (fn == "System.Nullable`1[System.Boolean] ValidateBoolean(Lang.Php.Filters.ServerVariables)")
            {
                return(Make_FilterInput(
                           new PhpConstValue(FilterInput.Type.Server),
                           ctx.TranslateValue(src.Arguments[0]),
                           FILTER_VALIDATE_BOOLEAN,
                           null,
                           FILTER_NULL_ON_FAILURE
                           ));
            }
            throw new NotImplementedException();
        }
Пример #4
0
        public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, ClassFieldAccessExpression src)
        {
            var s = TranslatorBase.GetCompareName(src.Member);

            if (cache == null)
            {
                cache = new Dictionary <string, IPhpValue>()
                {
                    { "System.String::Empty", new PhpConstValue("") },
                    { "System.Math::PI", new PhpDefinedConstExpression("M_PI", null) },
                    { "System.Math::E", new PhpDefinedConstExpression("M_E", null) },
                    { "System.Int32::MaxValue", new PhpConstValue(int.MaxValue) },
                }
            }
            ;

            // Math.E
            IPhpValue o;

            if (cache.TryGetValue(s, out o))
            {
                return(o);
            }
            return(null);
        }

                #endregion Methods 

                #region Fields 

        Dictionary <string, IPhpValue> cache;

                #endregion Fields 
    }
Пример #5
0
        private static IPhpValue _AddFilter(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            var    methodName = src.MethodInfo.Name;
            WpTags tag;

            if (Enum.TryParse(methodName, out tag))
            {
                var    tt = typeof(WpTags);
                var    methodCallExpression = new PhpMethodCallExpression("add_filter");
                var    fi   = tt.GetField(methodName);
                var    sss  = new ClassFieldAccessExpression(fi, fi.IsStatic);
                var    sss1 = ctx.TranslateValue(sss);
                IValue v    = new ConstValue(tag);
                var    gg   = ctx.TranslateValue(v);

                methodCallExpression.Arguments.Add(new PhpMethodInvokeValue(sss1));
                foreach (var argument in src.Arguments)
                {
                    var phpValue = ctx.TranslateValue(argument.MyValue);
                    methodCallExpression.Arguments.Add(new PhpMethodInvokeValue(phpValue));
                }
                return(methodCallExpression);
            }
            throw new NotImplementedException();
        }
Пример #6
0
 public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
 {
     if (src.MethodInfo.DeclaringType == typeof(StringBuilder))
     {
         var fn = src.MethodInfo.ToString();
         if (fn == "System.Text.StringBuilder Append(System.String)")
         {
             var sb  = ctx.TranslateValue(src.TargetObject);
             var arg = ctx.TranslateValue(src.Arguments[0].MyValue);
             return(new PhpAssignExpression(sb, arg, "."));
         }
         if (fn == "System.Text.StringBuilder AppendLine(System.String)")
         {
             var sb      = ctx.TranslateValue(src.TargetObject);
             var arg     = ctx.TranslateValue(src.Arguments[0].MyValue);
             var eol     = new PhpDefinedConstExpression("PHP_EOL", null);
             var arg_eol = PhpBinaryOperatorExpression.ConcatStrings(arg, eol);
             return(new PhpAssignExpression(sb, arg_eol, "."));
         }
         if (fn == "System.String ToString()")
         {
             return(ctx.TranslateValue(src.TargetObject));
         }
         Console.WriteLine(fn);
         throw new NotSupportedException();
     }
     return(null);
 }
Пример #7
0
        public static object __Translate(IExternalTranslationContext ctx, object src)
        {
            CallConstructor x = src as CallConstructor;

            if (x == null)
            {
                return(null);
            }
            if (x.Arguments.Length != 0)
            {
                throw new NotSupportedException();
            }
            var g = new PhpArrayCreateExpression();
            var a = x.Initializers.Cast <IValueTable_PseudoValue>().ToArray();
            List <IPhpValue> o = new List <IPhpValue>();

            foreach (var i in a)
            {
                var a1    = i as IValueTable_PseudoValue;
                var a2    = a1.Items[0];
                var a3    = a1.Items[1];
                var key   = ctx.TranslateValue(a2);
                var value = ctx.TranslateValue(a3);
                var t     = new PhpAssignExpression(key, value);
                o.Add(t);
            }
            g.Initializers = o.ToArray();
            return(g);
        }
Пример #8
0
        public override IPyValue TranslateToPython(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            var mi   = src.MethodInfo;
            var type = mi.DeclaringType;

            if (mi.IsGenericMethod)
            {
                mi = mi.GetGenericMethodDefinition();
            }

            if (type == typeof(Enumerable))
            {
                switch (mi.Name)
                {
                case "ToArray":
                case "ToList":
                    return(ctx.TranslateValue(src.Arguments[0]));
                }

                var mn = mi.ToString();
                switch (mn)
                {
                case "System.Collections.Generic.IEnumerable`1[System.Int32] Range(Int32, Int32)":
                    return(Translate_Enumerable_Range(ctx, src));

                default:
                    throw new NotImplementedException(mn);
                }
            }

            return(null);
        }
Пример #9
0
 public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CsharpInstancePropertyAccessExpression src)
 {
     if (src.Member.DeclaringType == typeof(MySQLi))
     {
         var n = src.Member.Name;
         if (n == "WasConnectionError" || n == "WasSuccessfulConnection")
         {
             // according to error http://www.php.net/manual/en/mysqli.construct.php
             IPhpValue getError;
             if (ctx.PhpVersion <= PhpVersions.PHP_5_3_0)
             {
                 getError = new PhpMethodCallExpression("mysqli_connect_error");
             }
             else
             {
                 getError = new PhpInstanceFieldAccessExpression("connect_error", ctx.TranslateValue(src.TargetObject), null);
             }
             var checkEmpty = new PhpMethodCallExpression("empty", getError);
             if (n == "WasSuccessfulConnection")
             {
                 return(checkEmpty);
             }
             var checkNotEmpty = new PhpUnaryOperatorExpression(checkEmpty, "!");
             return(checkNotEmpty);
         }
     }
     return(null);
 }
Пример #10
0
        IPhpValue GetIntervalString(IExternalTranslationContext ctx, IValue v, int mnoznik)
        {
            IPhpValue iphp;

            if (v is FunctionArgument)
            {
                v = (v as FunctionArgument).MyValue;
            }

            if (v is ConstValue)
            {
                var vv = (v as ConstValue).MyValue;
                if (vv is double)
                {
                    var    phpString = mk((double)vv * mnoznik);
                    IValue cs        = new ConstValue(phpString);
                    iphp = ctx.TranslateValue(cs);
                    return(iphp);
                }
                if (vv is int)
                {
                    var    phpString = mk((int)vv * mnoznik);
                    IValue cs        = new ConstValue(phpString);
                    iphp = ctx.TranslateValue(cs);
                    return(iphp);
                }
                throw new NotSupportedException();
            }
            throw new NotSupportedException();
        }
Пример #11
0
        public override IPyValue TranslateToPython(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            var dt = src.GenericDeclaringType;

            if (!IsDictionary(dt))
            {
                return(null);
            }
            switch (src.MethodName)
            {
            case nameof(DictionaryReplacer <int, int> .Remove):
                // del myDict['key']
                var      args   = MapNamedParameters(src);
                var      key    = ctx.TranslateValue(args.GetArgumentValue(0));
                var      target = ctx.TranslateValue(src.TargetObject);
                IPyValue arg    = new PyArrayAccessExpression(target, key);
                var      m      = new PyMethodCallExpression("del", arg);
                m.OnSkipBracketRequest += (mce, args2) =>
                {
                    args2.CanSkipBrackets = GeneralRulesForMetodBrackets.Bla(mce);
                };
                return(m);
            }

            return(null);
        }
Пример #12
0
        public IPyValue TranslateToPython(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (!typeof(TfScope).Assembly.Equals(src.MethodInfo.DeclaringType?.Assembly))
            {
                return(null);
            }
            var mi = src.GenericMethodInfo;

            if (mi.GetCustomAttribute <DirectCallAttribute>() != null)
            {
                return(null);
            }
            var name = mi.ToString();
            var dt   = mi.DeclaringType;

            if (mi.GetCustomAttribute <DirectCallAttribute>() != null)
            {
                return(null);
            }
            //Lang.Python.Tensorflow.TfScope NameScope(System.String)
            if (dt == typeof(Tf))
            {
                if (name == "Lang.Python.Tensorflow.TfScope NameScope(System.String)")
                {
                }

                if (mi.Name == nameof(Tf.TruncatedNormal))
                {
                }
            }

            throw new NotImplementedException(name);
        }
Пример #13
0
        public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (src.IsDelegate)
            {
                return(_Delegate(ctx, src));
            }

            if (src.MethodInfo.DeclaringType == typeof(Html))
            {
                var tmp = new Lang__Php__Html__Methods().TranslateToPhp(ctx, src);
                if (tmp != null)
                {
                    return(tmp);
                }
            }
            var principles = ctx.GetTranslationInfo();

            src = SubstituteByReplacerMethod(ctx, src);
            #region Konwersja atrybutami
            {
                var value = Try_DirectCallAttribute(ctx, src);
                if (value != null)
                {
                    return(value);
                }
                value = Try_UseExpressionAttribute(ctx, src);
                if (value != null)
                {
                    return(value);
                }
            }
            #endregion

            ctx.GetTranslationInfo().CheckAccesibility(src);
            var cti = principles.FindClassTranslationInfo(src.MethodInfo.DeclaringType);
            if (cti == null)
            {
                throw new NotSupportedException();
            }
            var mti = principles.GetOrMakeTranslationInfo(src.MethodInfo);
            {
                var phpMethod = new PhpMethodCallExpression(mti.ScriptName);
                if (src.MethodInfo.IsStatic)
                {
                    var a = principles.GetPhpType(src.MethodInfo.DeclaringType, true, principles.CurrentType);
                    phpMethod.SetClassName(a, mti);
                }
                phpMethod.TargetObject = ctx.TranslateValue(src.TargetObject);
                CopyArguments(ctx, src.Arguments, phpMethod, null);

                if (cti.DontIncludeModuleForClassMembers)
                {
                    phpMethod.DontIncludeClass = true;
                }
                return(phpMethod);
            }

            throw new Exception(string.Format("bright cow, {0}", src.MethodInfo.DeclaringType.FullName));
        }
Пример #14
0
 public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CallConstructor src)
 {
     if (src.Info.DeclaringType == typeof(StringBuilder))
     {
         return(new PhpConstValue(""));
     }
     return(null);
 }
Пример #15
0
 public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, BinaryOperatorExpression src)
 {
     if (src.OperatorMethod == null)
     {
         return(null);
     }
     return(null);
 }
        public IPyValue TranslateToPython(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (src.IsDelegate)
            {
                return(TranspileDelegateToPyton(ctx, src));
            }


            var principles = ctx.GetTranslationInfo();

            src = SubstituteByReplacerMethod(ctx, src);
            {
                var value = Try_DirectCallAttribute(ctx, src);
                if (value != null)
                {
                    return(value);
                }
                value = Try_UseExpressionAttribute(ctx, src);
                if (value != null)
                {
                    return(value);
                }
            }

            ctx.GetTranslationInfo().CheckAccesibility(src);
            var declaringType = src.MethodInfo.DeclaringType;

            if (declaringType.IsGenericType)
            {
                declaringType = declaringType.GetGenericTypeDefinition();
            }
            var cti = principles.FindClassTranslationInfo(declaringType);

            if (cti == null)
            {
                throw new NotSupportedException();
            }
            var mti = principles.GetOrMakeTranslationInfo(src.MethodInfo);

            {
                var pyMethod = new PyMethodCallExpression(mti.ScriptName);
                if (src.MethodInfo.IsStatic)
                {
                    var a = principles.GetPyType(src.MethodInfo.DeclaringType, true, principles.CurrentType);
                    pyMethod.SetClassName(a, mti);
                }
                pyMethod.TargetObject = ctx.TranslateValue(src.TargetObject);
                CopyArguments(ctx, src.Arguments, pyMethod, null);

                if (cti.DontIncludeModuleForClassMembers)
                {
                    pyMethod.DontIncludeClass = true;
                }
                return(pyMethod);
            }

            throw new Exception(string.Format("bright cow, {0}", src.MethodInfo.DeclaringType.FullName));
        }
Пример #17
0
 public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CallConstructor src)
 {
     if (src.Info.DeclaringType == typeof(PhpDirectoryEntry))
     {
         var a = ctx.TranslateValue(src.Arguments[0].MyValue);
         return(a);
     }
     return(null);
 }
Пример #18
0
        private static IPyValue SingleArgumentMathFunction(
            string name,
            IExternalTranslationContext ctx,
            CsharpMethodCallExpression src)
        {
            var moduleExpression = new PyModuleExpression(PyModules.Math, name);

            return(new PyMethodCallExpression(moduleExpression, name, SingleArg(ctx, src)));
        }
Пример #19
0
        private static object _Translate_MethodCallExpression(MethodCallExpression mce,
                                                              IExternalTranslationContext ctx)
        {
            if (mce.Method.Name == nameof(Remove))
            {
                throw new NotSupportedException();
            }

            return(null);
        }
Пример #20
0
        /// <summary>
        /// Jeśli metoda .NET ma zdefiniowany argument <see cref="DirectCallAttribute">DirectCall</see> to tworzy odpowiednie wywołanie funkcji PHP
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="src"></param>
        /// <returns></returns>
        private static IPhpValue Try_DirectCallAttribute(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            var directCallAttribute = src.MethodInfo.GetDirectCallAttribute();

            if (directCallAttribute == null)
            {
                return(null);
            }
            return(CreateExpressionFromDirectCallAttribute(ctx, directCallAttribute, src.TargetObject, src.Arguments, src.MethodInfo));
        }
Пример #21
0
        // Private Methods 

        private static IPhpValue _FilterVar(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            var mn = src.MethodInfo.Name;
            var fn = src.MethodInfo.ToString();

            #region ValidateBoolean(System.Object)
            if (fn == "System.Nullable`1[System.Boolean] ValidateBoolean(System.Object)")
            {
                var filter_var = Make_FilterVar(
                    ctx.TranslateValue(src.Arguments[0].MyValue),
                    FILTER_VALIDATE_BOOLEAN,
                    null,
                    FILTER_NULL_ON_FAILURE
                    );
                return(filter_var);
            }
            #endregion
            #region ValidateBoolean(System.Object, Boolean)
            if (fn == "Boolean ValidateBoolean(System.Object, Boolean)") // checked !!!!
            {
                return(Make_FilterVar(
                           ctx.TranslateValue(src.Arguments[0].MyValue),
                           FILTER_VALIDATE_BOOLEAN,
                           PhpArrayCreateExpression.MakeKeyValue(new PhpConstValue("default"), ctx.TranslateValue(src.Arguments[1].MyValue)),
                           null
                           ));
            }
            #endregion
            #region ValidateIp
            if (fn == "System.String ValidateIp(System.Object, Lang.Php.Filters.IpFlags, Lang.Php.Filters.IpOptions)")
            {
                IPhpValue flags = null;
                IPhpValue def   = null;
                if (src.Arguments.Length > 1)
                {
                    flags = ctx.TranslateValue(src.Arguments[1].MyValue);
                }
                if (src.Arguments.Length > 2)
                {
                    def = ctx.TranslateValue(src.Arguments[2].MyValue);
                }
                return(Make_FilterVar(
                           ctx.TranslateValue(src.Arguments[0].MyValue),
                           FILTER_VALIDATE_IP,
                           def,
                           flags));
                //PhpArrayCreateExpression.MakeKeyValue(
                //new PhpConstValue("default"),
                //ctx.TranslateValue(src.Arguments[1].MyValue)),
                //ctx.TranslateValue(src.Arguments[1].MyValue)
            }
            #endregion
            throw new NotImplementedException();
        }
Пример #22
0
        public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CsharpInstancePropertyAccessExpression src)
        {
            if (src.Member.DeclaringType != typeof(DateTime))
            {
                return(null);
            }

            var to = ctx.TranslateValue(src.TargetObject);

            if (src.Member.Name == "Date")
            {
                if (to.ToString() == "new DateTime()")
                {
                    // echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";
                    var co  = new PhpMethodCallExpression("date", new PhpConstValue(DateOnly));
                    var co1 = new PhpMethodCallExpression("date_create_from_format", new PhpConstValue(DateOnly), co);
                    return(co1);
                }
                else
                {
                    var _for = new PhpMethodCallExpression(to, "format", new PhpConstValue(DateOnly));
                    var co   = new PhpMethodCallExpression("date_create_from_format",
                                                           _for, new PhpConstValue(DateOnly));
                    return(co);
                }
            }
            if (src.Member.Name == "Day")
            {
                return(GetDatePart(to, "d"));
            }
            if (src.Member.Name == "Month")
            {
                return(GetDatePart(to, "m"));
            }
            if (src.Member.Name == "Year")
            {
                return(GetDatePart(to, "Y"));
            }

            if (src.Member.Name == "Hour")
            {
                return(GetDatePart(to, "H"));
            }
            if (src.Member.Name == "Minute")
            {
                return(GetDatePart(to, "i"));
            }
            if (src.Member.Name == "Second")
            {
                return(GetDatePart(to, "s"));
            }

            throw new NotImplementedException();
        }
Пример #23
0
        private IPhpValue TranslateAddInterval(IExternalTranslationContext ctx, CsharpMethodCallExpression src, int mnoznik)
        {
            var intervalString = GetIntervalString(ctx, src.Arguments[0], mnoznik);
            var interval       = PhpMethodCallExpression.MakeConstructor("DateInterval", null, intervalString);

            interval.DontIncludeClass = true;
            var targetObject = ctx.TranslateValue(src.TargetObject);
            var methd        = new PhpMethodCallExpression("date_add", null, targetObject, interval);

            return(methd);
        }
Пример #24
0
        private static IPyValue SingleArg(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (src.Arguments.Length != 1)
            {
                throw new Exception("Only one argument expected for " + src.MethodInfo.Name);
            }
            var arg0     = src.Arguments[0];
            var pyValue0 = ctx.TranslateValue(arg0.MyValue);

            return(pyValue0);
        }
Пример #25
0
        public IPyValue TranslateToPython(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (src.MethodInfo.DeclaringType == typeof(Py))
            {
                if (src.MethodInfo.Name == nameof(Py.Nothing))
                {
                    return(new PyEmptyExpression());
                }
            }

            return(null);
        }
Пример #26
0
        public static object __Translate(IExternalTranslationContext ctx, object src)
        {
            switch (src)
            {
            case CallConstructor callConstructor:
                return(__Translate_CallConstructor(callConstructor, ctx));

            case MethodCallExpression mce:
                return(_Translate_MethodCallExpression(mce, ctx));
            }

            return(null);
        }
Пример #27
0
        public IPyValue TranslateToPython(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (src.MethodInfo.DeclaringType == typeof(Math))
            {
                // https://docs.python.org/3/library/math.html
                if (src.Arguments.Length == 1)
                {
                    var name = ConvertToDirect1(src.MethodInfo.Name);
                    if (name != null)
                    {
                        return(SingleArgumentMathFunction(name, ctx, src));
                    }
                }
                else if (src.Arguments.Length == 2)
                {
                    var name = ConvertToDirect2(src.MethodInfo.Name);
                    if (name != null)
                    {
                        var moduleExpression = new PyModuleExpression(PyModules.Math, name);
                        return(new PyMethodCallExpression(moduleExpression, name, Args(ctx, src)));
                    }
                }

                var fn = src.MethodInfo.ToString();

                /*
                 * switch (fn)
                 * {
                 *  case "Double Sin(Double)":
                 *  case "Double Cos(Double)":
                 *  case "Double Tan(Double)":
                 *      return SingleArgumentMathFunction(src.MethodInfo.Name.ToLower(), ctx, src);
                 * }
                 */
                throw new NotImplementedException($"{nameof(SystemMathNodeTranslator)}->{fn}");
            }

            if (src.MethodInfo.DeclaringType == typeof(double))
            {
                var fn = src.MethodInfo.ToString();
                switch (fn)
                {
                case "Boolean IsNaN(Double)":
                    return(SingleArgumentMathFunction("isnan", ctx, src));

                case "Boolean IsInfinity(Double)":
                    return(SingleArgumentMathFunction("isinf", ctx, src));
                }
            }
            return(null);
        }
Пример #28
0
        public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (src.MethodInfo.DeclaringType != typeof(DateTime))
            {
                return(null);
            }
            var fn = src.MethodInfo.ToString();

            if (src.MethodInfo.Name == "ToString")
            {
                var to = ctx.TranslateValue(src.TargetObject);
                var c  = new PhpMethodCallExpression(to, "format", new PhpConstValue("Y-m-d H:i:s"));
                return(c);
            }
            if (fn == "System.TimeSpan op_Subtraction(System.DateTime, System.DateTime)")
            {
                var l = ctx.TranslateValue(src.Arguments[0].MyValue);
                var r = ctx.TranslateValue(src.Arguments[1].MyValue);
                var c = new PhpMethodCallExpression("date_diff", r, l);
                return(c);
            }
            if (fn == "Boolean op_GreaterThanOrEqual(System.DateTime, System.DateTime)")
            {
                return(new PhpBinaryOperatorExpression(">=",
                                                       ctx.TranslateValue(src.Arguments[0]),
                                                       ctx.TranslateValue(src.Arguments[1])));
            }
            if (fn == "Boolean op_Inequality(System.DateTime, System.DateTime)")
            {
                return(new PhpBinaryOperatorExpression("!=",
                                                       ctx.TranslateValue(src.Arguments[0]),
                                                       ctx.TranslateValue(src.Arguments[1])));
            }
            if (fn == "Boolean op_Equality(System.DateTime, System.DateTime)")
            {
                return(new PhpBinaryOperatorExpression("==",
                                                       ctx.TranslateValue(src.Arguments[0]),
                                                       ctx.TranslateValue(src.Arguments[1])));
            }

            if (fn == "System.DateTime AddDays(Double)")
            {
                return(TranslateAddInterval(ctx, src, SecPerDay));
            }
            if (fn == "System.DateTime AddHours(Double)")
            {
                return(TranslateAddInterval(ctx, src, SecPerHour));
            }

            throw new NotImplementedException(fn);
        }
Пример #29
0
 public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, ClassFieldAccessExpression src)
 {
     if (src.Member.DeclaringType == typeof(Font))
     {
         var name = src.Member.Name;
         if (name == "Font1" || name == "Font2" || name == "Font3" || name == "Font4" || name == "Font5")
         {
             var size = int.Parse(name.Substring(4));
             return(new PhpConstValue(size));
         }
         throw new NotImplementedException();
     }
     return(null);
 }
Пример #30
0
 public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CsharpInstancePropertyAccessExpression src)
 {
     if (src.Member.DeclaringType == typeof(TimeSpan))
     {
         var to = ctx.TranslateValue(src.TargetObject);
         if (src.Member.Name == "TotalDays")
         {
             var aa = new PhpInstanceFieldAccessExpression("days", to, null);
             return(aa);
         }
         throw new NotSupportedException();
     }
     return(null);
 }
Пример #31
0
 public IPhpValue Translate(IExternalTranslationContext ctx, object node)
 {
     return _method.Invoke(_targetObject, new[] { ctx, node }) as IPhpValue;
 }
Пример #32
0
        // Public Methods 

        public IPhpValue TranslateToPhp(IExternalTranslationContext ctx, CsharpMethodCallExpression src)
        {
            if (src.MethodInfo.DeclaringType == typeof(Html))
            {
                this.ctx = ctx;
                list = new List<IPhpValue>();
                var methodName = src.MethodInfo.Name;
                var isecho = methodName.StartsWith("Echo");
                if (isecho)
                    methodName = methodName.Substring(4);
                if (methodName == "TagBound")
                {
                    FillTagOpen(2, ctx, src, ">");
                    Append(src.Arguments[1]);
                    FillTagEnd(src.Arguments[0]);
                    return MakeEchoIfNecessary(isecho);
                }
                if (methodName == "Attributes")
                {
                    for (var i = 1; i < src.Arguments.Length; i += 2)
                    {
                        var key = src.Arguments[i - 1];
                        var value = src.Arguments[i];
                        Append(" ");
                        Append(key);
                        Append("=\"");
                        Append(value);
                        Append("\"");
                    }
                    return MakeEchoIfNecessary(isecho);
                }
                if (methodName == "TagOpen" || methodName == "TagSingle")
                {
                    var end = methodName == "TagOpen" ? ">" : " />";
                    FillTagOpen(1, ctx, src, end);
                    return MakeEchoIfNecessary(isecho);
                }
                if (methodName == "TagOpenOpen")
                {
                    FillTagOpen(1, ctx, src, "");
                    return MakeEchoIfNecessary(isecho);
                }
                if (methodName == "TagClose")
                {
                    FillTagEnd(src.Arguments[0]);
                    if (src.Arguments.Length == 2)
                    {
//                        throw new NotSupportedException();
                        Append("\r\n");
                    }
                    return MakeEchoIfNecessary(isecho);
                }
                if (methodName == "Comment")
                {
                    Append("<!-- ");
                    Append(src.Arguments[0]);
                    Append(" -->");
                    return MakeEchoIfNecessary(isecho);
                }
                if (methodName == "Pixels" || methodName == "Percent")
                {
                    Append(src.Arguments[0]);
                    Append(methodName == "Pixels" ? "px" : "%");
                    return MakeEchoIfNecessary(isecho);
                }
                if (methodName == "Mm")
                {
                    Append(src.Arguments[0]);
                    Append("mm");
                    return MakeEchoIfNecessary(isecho);
                }

                if (methodName == "Css")
                {
                    for (var i = 1; i < src.Arguments.Length; i += 2)
                    {
                        var key = src.Arguments[i - 1];
                        var value = src.Arguments[i];
                        Append(key);
                        Append(":");
                        Append(value);
                        Append(";");
                    }
                    return MakeEchoIfNecessary(isecho);
                }
                if (methodName == "CssBorder")
                {
                    Append(src.Arguments[0]);
                    Append(" ");
                    Append(src.Arguments[1]);
                    Append(" ");
                    Append(src.Arguments[2]);
                    return MakeEchoIfNecessary(isecho);
                }
                throw new NotSupportedException();
            }
            return null;
        }
Пример #33
0
        private void FillTagOpen(int argsFrom, IExternalTranslationContext ctx, CsharpMethodCallExpression src, string end)
        {
            var tagName = src.Arguments[0];
            Append("<");
            Append(tagName);
            for (var i = argsFrom + 1; i < src.Arguments.Length; i += 2)
            {
                var key = src.Arguments[i - 1];
                var value = src.Arguments[i];
                Append(" ");
                Append(key);
                Append("=\"");
                Append(value);
                Append("\"");
            }
            Append(end);

        }