コード例 #1
0
        public override ktValue _RunMethod(ktString Name, ktList Arguments)
        {
            ktValue Value = ktValue.Null;

            switch (Name.AsLower())
            {
                case "run":
                case "_run":
                case "execute":
                case "_execute":
                case "_func_call":
                    {
                        Value = Run( Arguments );
                        break;
                    }
                default:
                    {
                        throw new ktError("Couldn't find the method '" +
                                          Name + "' in class '" + m_Name + "'.", ktERR._404);
                    }
            }

            return Value;
        }
コード例 #2
0
ファイル: ktObject.cs プロジェクト: ChrisHinde/KacTalk_NET
        public object ToType(ktString Type)
        {
            if (m_Object == null)
            {
                return null;
            }

            try
            {
                ktClass Class = (ktClass)m_Object;

                return Class.RunMethod("To" + Type).ToType(Type);
            }
            catch (Exception)
            {
            }

            switch (Type.AsLower())
            {
                case "bool":
                    {
                        if (m_Object.GetType() == typeof(bool))
                        {
                            return m_Object;
                        }
                        else if (m_Object.GetType() == typeof(int))
                        {
                            return ((int)m_Object) != 0;
                        }
                        else if (m_Object.GetType() == typeof(float))
                        {
                            return ((float)m_Object) != 0.0f;
                        }
                        else if (m_Object.GetType() == typeof(double))
                        {
                            return ((double)m_Object) != 0.0;
                        }
                        else if (m_Object.GetType() == typeof(char))
                        {
                            return ((char)m_Object) != 0;
                        }
                        else if (m_Object.GetType() == typeof(string))
                        {
                            return ((string)m_Object) != "false";
                        }
                        else if (m_Object.GetType() == typeof(ktString))
                        {
                            return ((ktString)m_Object) != "false";
                        }
                        else if (m_Object.GetType() == typeof(ktList))
                        {
                            return !((ktList)m_Object).IsEmpty();
                        }
                        else
                        {
                            return m_Object.ToString() != "false";
                        }
                    }
                case "int":
                case "integer":
                    {
                        try
                        {
                            if (m_Object.GetType() == typeof(bool))
                            {
                                return (((bool)m_Object) ? 1 : 0);
                            }
                            else if (m_Object.GetType() == typeof(int))
                            {
                                return m_Object;
                            }
                            else if (m_Object.GetType() == typeof(float))
                            {
                                return (int)((float)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(double))
                            {
                                return (int)((double)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(char))
                            {
                                return (int)((char)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(string))
                            {
                                return Convert.ToInt32(((string)m_Object));
                            }
                            else if (m_Object.GetType() == typeof(ktString))
                            {
                                return ((ktString)m_Object).ToInt();
                            }
                            else
                            {
                                return Convert.ToInt32(m_Object.ToString());
                            }
                        }
                        catch (Exception Err)
                        {
                            if (Err.GetType() == typeof(System.FormatException))
                            {
                                throw new ktError("ktObjectWrapper::ToType: Cant make '" + Value.ToString() + "' into an integer", ktERR.WRONGTYPE);
                            }
                            else
                            {
                                throw Err;
                            }
                        }
                    }
                case "float":
                    {
                        try
                        {
                            if (m_Object.GetType() == typeof(bool))
                            {
                                return (((bool)m_Object) ? 1.0f : 0.0f);
                            }
                            else if (m_Object.GetType() == typeof(int))
                            {
                                return (float)((int)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(float))
                            {
                                return m_Object;
                            }
                            else if (m_Object.GetType() == typeof(double))
                            {
                                return (float)((double)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(char))
                            {
                                return (float)((char)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(string))
                            {
                                return Convert.ToSingle(((string)m_Object));
                            }
                            else if (m_Object.GetType() == typeof(ktString))
                            {
                                return ((ktString)m_Object).ToFloat();
                            }
                            else
                            {
                                return Convert.ToSingle(m_Object.ToString());
                            }
                        }
                        catch (Exception Err)
                        {
                            if (Err.GetType() == typeof(System.FormatException))
                            {
                                throw new ktError("ktObjectWrapper::ToType: Cant make '" + m_Object.ToString() + "' into an " + Type, ktERR.WRONGTYPE);
                            }
                            else
                            {
                                throw Err;
                            }
                        }
                    }
                case "double":
                    {
                        try
                        {
                            if (m_Object.GetType() == typeof(bool))
                            {
                                return (((bool)m_Object) ? 1.0 : 0.0);
                            }
                            else if (m_Object.GetType() == typeof(int))
                            {
                                return (double)((int)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(float))
                            {
                                return (double)((float)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(double))
                            {
                                return m_Object;
                            }
                            else if (m_Object.GetType() == typeof(char))
                            {
                                return (double)((char)m_Object);
                            }
                            else if (m_Object.GetType() == typeof(string))
                            {
                                return Convert.ToDouble(((string)m_Object));
                            }
                            else if (m_Object.GetType() == typeof(ktString))
                            {
                                return ((ktString)m_Object).ToDouble();
                            }
                            else
                            {
                                return Convert.ToDouble(m_Object.ToString());
                            }
                        }
                        catch (Exception Err)
                        {
                            if (Err.GetType() == typeof(System.FormatException))
                            {
                                throw new ktError("ktValue::ToType: Cant make '" + m_Object.ToString() + "' into an " + Type, ktERR.WRONGTYPE);
                            }
                            else
                            {
                                throw Err;
                            }
                        }
                    }
                default:
                    {
                        return m_Object;
                    }

            }

            //(((ktClass)Value.Value).ToString().ToLower() == "true")
            //			return null;
        }
コード例 #3
0
ファイル: ktInt.cs プロジェクト: ChrisHinde/KacTalk_NET
        /// <summary>
        /// Run a method
        /// </summary>
        /// <param name="Name"></param>
        /// <param name="Arguments"></param>
        /// <returns></returns>
        public override ktValue _RunMethod(ktString Name, ktList Arguments)
        {
            ktValue Value = ktValue.Null;

            //ktDebug.Log("ktInt::" + Name);

            // Check the name of the method to call and call appropriate method
            switch (Name.AsLower())
            {
                case "_add":
                case "op+":
                case "operator+":
                    {
                        Value = _Add(Arguments);
                        break;
                    }
                case "add":
                case "op+=":
                case "operator+=":
                case "_append":
                    {
                        CheckIfConstant(Name);
                        Value = Add(Arguments);
                        break;
                    }
                case "increase":
                case "op++":
                case "operator++":
                case "_increase":
                    {
                        CheckIfConstant(Name);
                        Value = Increase();
                        break;
                    }
                case "_subtract":
                case "op-":
                case "operator-":
                    {
                        Value = _Subtract(Arguments);
                        break;
                    }
                case "op-=":
                case "operator-=":
                case "subtract":
                    {
                        CheckIfConstant(Name);
                        Value = Subtract(Arguments);
                        break;
                    }
                case "decrease":
                case "op--":
                case "operator--":
                case "_decrease":
                    {
                        CheckIfConstant(Name);
                        Value = Decrease();
                        break;
                    }
                case "_multiply":
                case "_times":
                case "op*":
                case "operator*":
                    {
                        Value = _Multiply(Arguments);
                        break;
                    }
                case "multiply":
                case "times":
                case "op*=":
                case "operator*=":
                    {
                        CheckIfConstant(Name);
                        Value = Multiply(Arguments);
                        break;
                    }
                case "_divide":
                case "op/":
                case "operator/":
                    {
                        Value = _Divide(Arguments);
                        break;
                    }
                case "op/=":
                case "operator/=":
                case "divide":
                    {
                        CheckIfConstant(Name);
                        Value = Divide(Arguments);
                        break;
                    }
                case "_mod":
                case "_modulus":
                case "op%":
                case "operator%":
                    {
                        Value = _Modulus(Arguments);
                        break;
                    }
                case "op%=":
                case "operator%=":
                case "modulus":
                    {
                        CheckIfConstant(Name);
                        Value = Modulus(Arguments);
                        break;
                    }
                case "_power":
                case "_pow":
                case "op**":
                case "operator**":
                    {
                        Value = _Power(Arguments);
                        break;
                    }
                case "op^":
                case "operator^":
                    {
                        if (kacTalk.Main.MathMode)
                        {
                            Value = _Power(Arguments);
                        }
                        else
                        {
                            Value = _ExclusiveOr(Arguments);
                        }
                        break;
                    }
                case "op^=":
                case "operator^=":
                    {
                        CheckIfConstant(Name);
                        if (kacTalk.Main.MathMode)
                        {
                            Value = Power(Arguments);
                        }
                        else
                        {
                            Value = ExclusiveOr(Arguments);
                        }
                        break;
                    }
                case "power":
                case "pow":
                    {
                        CheckIfConstant(Name);
                        Value = Power(Arguments);
                        break;
                    }
                case "_assign":
                case "op=":
                case "operator=":
                case "assign":
                    {
                        CheckIfConstant(Name);
                        Value = Assign(Arguments);
                        break;
                    }
                case "tobase":
                    {
                        Value = ToBase(Arguments);
                        break;
                    }
                case "tobinary":
                    {
                        Value = _ToBase(2);
                        break;
                    }
                /*case "toint":
                    {
                        Value = new ktValue("return", "ktInt", new ktInt(m_value), true, true);
                        break;
                    }*/
                case "tobool":
                    {
                        Value = _ToBool();
                        break;
                    }
                case "tooct":
                    {
                        Value = _ToBase(8);
                        break;
                    }
                case "tohex":
                    {
                        Value = _ToBase(16);
                        break;
                    }
                case "frombase":
                    {
                        Value = FromBase(Arguments);
                        break;
                    }
                case "frombinary":
                    {
                        Value = FromBase(Arguments, 2);
                        break;
                    }
                case "fromoct":
                    {
                        Value = FromBase(Arguments, 8);
                        break;
                    }
                case "fromhex":
                    {
                        Value = FromBase(Arguments, 16);
                        break;
                    }
                case ">":
                case "op>":
                case "operator>":
                case "mt":
                case "gt":
                case "greater":
                case "greaterthan":
                case "more":
                case "morethan":
                case "isgreater":
                case "isgreaterthan":
                case "ismore":
                case "ismorethan":
                case ">=":
                case "op>=":
                case "operator>=":
                case "mte":
                case "gte":
                case "greaterorequal":
                case "greaterthanorequal":
                case "moreorequal":
                case "morethanorequal":
                case "isgreaterorequal":
                case "isgreaterthanorequal":
                case "ismoreorequal":
                case "ismorethanorequal":
                case "<":
                case "op<":
                case "operator<":
                case "lt":
                case "less":
                case "lessthan":
                case "isless":
                case "islessthan":
                case "<=":
                case "op<=":
                case "operator<=":
                case "lte":
                case "lessorequal":
                case "lessthanorequal":
                case "islessorequal":
                case "islessthanorequal":
                case "<>":
                case "!=":
                case "op<>":
                case "op!=":
                case "operator<>":
                case "operator!=":
                case "ne":
                case "isnotequal":
                case "notequal":
                case "==":
                case "op==":
                case "operator==":
                case "isequal":
                case "equal":
                case "eq":
                case "compare":
                    {
                        Value = _Compare(Name,Arguments);
                        break;
                    }
                default:
                    {
                        throw new ktError("Couldn't find the method '" +
                                          Name + "' in class '" + m_Name + "'.", ktERR._404);
                    }
            }

            // Done...
            return Value;
        }
コード例 #4
0
ファイル: ktInt.cs プロジェクト: ChrisHinde/KacTalk_NET
        /// <summary>
        /// Compare the integer with the given value
        /// </summary>
        /// <param name="op">The operator to use for the comparison</param>
        /// <param name="val">The value to compare with</param>
        /// <returns>A value representing the comparison</returns>
        public override int Compare(ktString op, ktValue val)
        {
            int ret = 0;
            // Get the value as an integer
            int iVal = GetAsInt(val);

            // Check which operator we should use
            switch ( op.AsLower() )
            {
                case ">":
                case "op>":
                case "operator>":
                case "mt":
                case "gt":
                case "greater":
                case "greaterthan":
                case "more":
                case "morethan":
                case "isgreater":
                case "isgreaterthan":
                case "ismore":
                case "ismorethan":
                    {
                        ret = (m_value > iVal) ? 1 : 0;
                        break;
                    }
                case ">=":
                case "op>=":
                case "operator>=":
                case "mte":
                case "gte":
                case "greaterorequal":
                case "greaterthanorequal":
                case "moreorequal":
                case "morethanorequal":
                case "isgreaterorequal":
                case "isgreaterthanorequal":
                case "ismoreorequal":
                case "ismorethanorequal":
                    {
                        ret = (m_value >= iVal) ? 1 : 0;
                        break;
                    }
                case "<":
                case "op<":
                case "operator<":
                case "lt":
                case "less":
                case "lessthan":
                case "isless":
                case "islessthan":
                    {
                        ret = (m_value < iVal) ? 1 : 0;
                        break;
                    }
                case "<=":
                case "op<=":
                case "operator<=":
                case "lte":
                case "lessorequal":
                case "lessthanorequal":
                case "islessorequal":
                case "islessthanorequal":
                    {
                        ret = (m_value <= iVal) ? 1 : 0;
                        break;
                    }
                case "<>":
                case "!=":
                case "op<>":
                case "op!=":
                case "operator<>":
                case "operator!=":
                case "ne":
                case "isnotequal":
                case "notequal":
                    {
                        ret = (m_value != iVal) ? 1 : 0;
                        break;
                    }
                case "==":
                case "op==":
                case "operator==":
                case "isequal":
                case "equal":
                case "eq":
                    {
                        ret = (m_value == iVal) ? 1 : 0;
                        break;
                    }
                case "compare":
                    {
                        ret = m_value.CompareTo(iVal);
                        break;
                    }
                default:
                    {
                        throw new ktError("Couldn't find the method '" +
                                          op + "' in class '" + m_Name + "'.", ktERR._404);
                    }
            }

            return ret;
        }
コード例 #5
0
ファイル: ktClass.cs プロジェクト: ChrisHinde/KacTalk_NET
        public ktValue RunMethod(ktString Name, ktList Arguments)
        {
            if (Name.IsEmpty())
            {
                throw new ktError("Didn't get the name of the method to run in class '" +
                                m_Name + "'.", ktERR.NOTSET);
            }
            ktDebug.Log("RunM Arg:" + Arguments.Get_R());

            ktValue Value = ktValue.Null;
            //ktDebug.Log( "ktClass::RM( " + Name + " );" );
            try
            {
                Value = _RunMethod(Name, Arguments);
            }
            catch (Exception Err)
            {
                Value = (ktValue)Arguments.First.Node.Value;
                if (Name == "Export")
                {
                    return new ktValue("", "ktString", kacTalk.Main.MakeObjectOf("ktString", Export()), true, true);
                }
                else if (Name.AsLower() == "tostring")
                {
                    return new ktValue("", "ktString", kacTalk.Main.MakeObjectOf("ktString", ToString()), true, true);
                }
                else if (Name.AsLower() == "operator~")
                {
                    return new ktValue("", "ktString", kacTalk.Main.MakeObjectOf("ktString", ToString() + Value.ToString()), true, true);
                }
                else if (Name.AsLower().StartsWith("to", out Name))
                {
                }

                throw Err;
            }

            return Value;
        }
コード例 #6
0
ファイル: ktClass.cs プロジェクト: ChrisHinde/KacTalk_NET
        public ktValue GetProperty(ktString Name, bool Copy)
        {
            ktValue Value = ktValue.Null;

            if (Name.IsEmpty())
            {
                return Value;
            }
            //ktDebug.Log( "GetProperty( " + Name + " )" );
            switch (Name.AsLower())
            {
                case "as_class":
                case "class":
                    {
                        return new ktValue(Name, "ktClass", CreateClass(), true, true);
                    }
                default:
                    {
                        //ktDebug.Log( "Default" );
                        Value = _GetProperty(Name, Copy);
                        break;
                    }
            }

            //ktDebug.Log( "Val =  " + ((Value == null) ? "NULL" : Value.ToString() ) + " )" );

            return Value;
        }
コード例 #7
0
ファイル: ktClass.cs プロジェクト: ChrisHinde/KacTalk_NET
        public virtual ktValue GetMember(ktString Name)
        {
            ktValue Value = ktValue.Null;

            try
            {
                Value = GetProperty(Name);
                //ktDebug.Log( "GM::P V:" + Value.ToString() + ";" );
                if (!Value.IsNull())
                {
                    return Value;
                }
            }
            catch (Exception)
            {
                //ktDebug.Log( "Err:" + E.ToString() + ";" );
            }
            try
            {
                ktFunction Func = GetMethod(Name);

                Value = new ktValue(Name, "ktFunction", Func, true, true);

                if (!Value.IsNull())
                {
                    return Value;
                }
            }
            catch (Exception)
            {
                if (Name == "Export")
                {
                    ktDelegateFunction Func = new ktDelegateFunction("Export", ExportValue);

                    Value = new ktValue(Name, "ktFunction", Func, true, true);

                    if (!Value.IsNull())
                    {
                        return Value;
                    }
                }
                else if (Name.AsLower() == "tostring")
                {
                    ktDelegateFunction Func = new ktDelegateFunction("ToString", ToStringValue);

                    Value = new ktValue(Name, "ktFunction", Func, true, true);

                    if (!Value.IsNull())
                    {
                        return Value;
                    }
                }
            }

            throw new ktError("Can't find the member '" + Name + "' in class '" + m_Name + "'!", ktERR._404);
        }
コード例 #8
0
        private ktString PrepBaseURL(ktString URL)
        {
            if (!URL.AsLower().StartsWith("http://"))
            {
                URL = "http://" + URL;
            }
            if ( m_UseQuery )
            {
                URL += "?kuery=";
            }

            return URL;
        }
コード例 #9
0
ファイル: ktDouble.cs プロジェクト: ChrisHinde/KacTalk_NET
        public override ktValue _RunMethod(ktString Name, ktList Arguments)
        {
            ktValue Value = ktValue.Null;

            switch (Name.AsLower())
            {
                case "_add":
                case "op+":
                case "operator+":
                case "add":
                    {
                        Value = Add(Arguments);
                        break;
                    }
            }

            return Value;
        }
コード例 #10
0
ファイル: ktValue.cs プロジェクト: ChrisHinde/KacTalk_NET
        public object ToType(ktString Type)
        {
            if (m_Object == null)
            {
                return null;
            }
            #if Debug
            ktDebug.Log( "ktValue::ToType( " + m_Object.GetType().ToString() + " )" );
            #endif
            try
            {
                ktClass Class = (ktClass)m_Object;

                ktValue v = Class.RunMethod("To" + Type);
                object o = v.ToType(Type);
                return o;
            }
            catch (Exception E)
            {
            #if Debug
            ktDebug.Log( E.ToString() + ";;;;;;;" + E.StackTrace.ToString() );
            #endif
            }

            if ((m_Object.GetType() == typeof(ktObjectWrapper)) ||
                (m_Object.GetStringType() == "ktObjectWrapper"))
            {
                return ((ktObjectWrapper)m_Object).ToType(Type);
            }

            switch (Type.AsLower())
            {
                case "bool":
                    {
                        if (m_Object.GetType() == typeof(ktString))
                        {
                            return ((ktString)m_Object).AsLower() != "false";
                        }
                        else if (m_Object.GetType() == typeof(ktList))
                        {
                            return !((ktList)m_Object).IsEmpty();
                        }
                        else
                        {
                            return m_Object.ToString().ToLower() != "false";
                        }
                    }
                case "int":
                case "integer":
                    {
                        try
                        {
                            if (m_Object.GetType() == typeof(ktString))
                            {
                                return ((ktString)m_Object).ToInt();
                            }
                            else
                            {
                                return Convert.ToInt32(m_Object.ToString());
                            }
                        }
                        catch (Exception Err)
                        {
                            if (Err.GetType() == typeof(System.FormatException))
                            {
                                throw new ktError("ktValue::ToType: Cant make '" + Value + "' into an integer", ktERR.WRONGTYPE);
                            }
                            else
                            {
                                throw Err;
                            }
                        }
                    }
                case "float":
                    {
                        try
                        {
                            if (m_Object.GetType() == typeof(ktString))
                            {
                                return ((ktString)m_Object).ToFloat();
                            }
                            else
                            {
                                return Convert.ToSingle(m_Object.ToString());
                            }
                        }
                        catch (Exception Err)
                        {
                            if (Err.GetType() == typeof(System.FormatException))
                            {
                                throw new ktError("ktValue::ToType: Cant make '" + Name + "' into an " + Type, ktERR.WRONGTYPE);
                            }
                            else
                            {
                                throw Err;
                            }
                        }
                    }
                case "double":
                    {
                        try
                        {
                            if (m_Object.GetType() == typeof(ktString))
                            {
                                return ((ktString)m_Object).ToDouble();
                            }
                            else
                            {
                                return Convert.ToDouble(m_Object.ToString());
                            }
                        }
                        catch (Exception Err)
                        {
                            if (Err.GetType() == typeof(System.FormatException))
                            {
                                throw new ktError("ktValue::ToType: Cant make '" + Name + "' into an " + Type, ktERR.WRONGTYPE);
                            }
                            else
                            {
                                throw Err;
                            }
                        }
                    }
                default:
                    {
                        return m_Object;
                    }

            }

            //(((ktClass)Value.Value).ToString().ToLower() == "true")
            //			return true;
        }
コード例 #11
0
ファイル: ktBool.cs プロジェクト: ChrisHinde/KacTalk_NET
 public override ktClass CreateObject(ktString Value)
 {
     return new ktBool(Value.AsLower() != "false");
 }
コード例 #12
0
ファイル: ktBool.cs プロジェクト: ChrisHinde/KacTalk_NET
        public override ktValue _RunMethod(ktString Name, ktList Arguments)
        {
            ktValue Value = ktValue.Null;

            switch (Name.AsLower())
            {
                case "!":
                case "not":
                case "_not":
                case "op!":
                case "operator!":
                    {
                        Value = _Not();
                        break;
                    }
                case "&&":
                case "and":
                case "_and":
                case "op&&":
                case "operator&&":
                    {
                    //    Value = _And(Arguments);
                        break;
                    }
                case ">":
                case "op>":
                case "operator>":
                case "mt":
                case "gt":
                case "greater":
                case "greaterthan":
                case "more":
                case "morethan":
                case "isgreater":
                case "isgreaterthan":
                case "ismore":
                case "ismorethan":
                case ">=":
                case "op>=":
                case "operator>=":
                case "mte":
                case "gte":
                case "greaterorequal":
                case "greaterthanorequal":
                case "moreorequal":
                case "morethanorequal":
                case "isgreaterorequal":
                case "isgreaterthanorequal":
                case "ismoreorequal":
                case "ismorethanorequal":
                case "<":
                case "op<":
                case "operator<":
                case "lt":
                case "less":
                case "lessthan":
                case "isless":
                case "islessthan":
                case "<=":
                case "op<=":
                case "operator<=":
                case "lte":
                case "lessorequal":
                case "lessthanorequal":
                case "islessorequal":
                case "islessthanorequal":
                case "<>":
                case "!=":
                case "op<>":
                case "op!=":
                case "operator<>":
                case "operator!=":
                case "ne":
                case "isnotequal":
                case "notequal":
                case "==":
                case "op==":
                case "operator==":
                case "isequal":
                case "equal":
                case "eq":
                    {
                        Value = _Compare(Name, Arguments);
                        break;
                    }
                default:
                    {
                        throw new ktError("Couldn't find the method '" +
                                          Name + "' in class '" + m_Name + "'.", ktERR._404);
                    }
            }

            return Value;
        }
コード例 #13
0
ファイル: ktString.cs プロジェクト: ChrisHinde/KacTalk_NET
 // Compare the string with 'Str' (ref. strcmp) (case-sensitive)
 public int CmpNoCase(ktString Str)
 {
     return String.Compare(Str.AsLower().GetValue(), AsLower().GetValue());
 }