Ejemplo n.º 1
0
        public bool SetVariable(ktString Name, ktValue Value, bool Add, bool Copy, bool IgnoreConstant)
        {
            // Nothing to use??
            if (Name.IsEmpty() || (Value == null) || (m_Block == null))
            {
                return false;
            }

            return m_Block.SetVariable(Name, Value, Add, Copy, IgnoreConstant);
        }
Ejemplo n.º 2
0
        public ktDelegateFunction(ktString Name, ktFunction_Double_Delegate Delegate)
            : base(Name, null, null, ktValue.Null)
        {
            m_Arguments = new ktList();
            m_Arguments.Add(new ktValue("D", "double",
                                              kacTalk.Main.GetClass("double"),
                                              true, true));

            m_Delegate = delegate(ktList Args)
            {
                if ((Args == null) || (Args.FirstNode == null) ||
                    (Args.FirstNode.Value == null))
                {
                    throw new ktError("Didn't get an argument for '" +
                                      Name + "'!", ktERR.MISSING);
                }
                //ktDebug.Log( "ktDF::DOUBLE(" +Args.FirstNode.Value.ToString() + ")" );
                ktString S_In = new ktString(Args.FirstNode.Value.ToString());
                double D_In = 0.0;
                double D_Out = 0.0;

                try
                {
                    if (System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator == ",")
                    {
                        S_In.Replace(".", ",", true);
                    }

                    D_In = S_In.ToDouble();
                }
                catch (Exception E)
                {
                    if (E.GetType() == typeof(System.FormatException) && !S_In.IsEmpty())
                    {
                        throw new ktError("ktDouble::CreateObject: Cant make '" + S_In + "' into an double", ktERR.WRONGTYPE);
                    }
                }
                ktDebug.Log("D_In: " + D_In.ToString());
                D_Out = Delegate(D_In);
                ktDebug.Log("D_Out: " + D_Out.ToString());

                return new ktValue("return", "double",
                                   kacTalk.Main.MakeObjectOf("double", D_Out),
                                   true, true);
            };
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Get a module...
        /// </summary>
        public ktModule GetModule(ktString Name)
        {
            if (Name.IsEmpty())
            {
                return null;
            }

            ktModule Module = null;

            if (m_Modules != null)
            {
                ktNode Node = m_Modules.GetNode(Name);

                if ((Node != null) && (Node.Value != null))
                {
                    Module = (ktModule)Node.Value;
                }
            }

            if (Module == null)
            {
                throw new ktError("kactalk::GetModule() : There's no module with the name '" +
                                  Name + "'!", ktERR.NOTDEF);
            }

            return Module;
        }
Ejemplo n.º 4
0
        public static Dictionary<ktString, ktString> ParseInfoString( ktString InfoStr )
        {
            int p = 0, p2 = 0;
            ktString property;
            ktString prop_name, prop_value;

            Dictionary<ktString, ktString> InfoMap = new Dictionary<ktString, ktString>();

            while (!InfoStr.IsEmpty())
            {
                p = InfoStr.IndexOf(';');
                if (p < 0)
                {
                    property = InfoStr;
                    p = InfoStr.Length() - 1;
                }
                else
                {
                    property = InfoStr.SubString(0, p).Trim();
                }
                p2 = property.IndexOf('=');
                prop_name = property.SubString(0, p2).AsUpper();
                prop_value = property.SubString(p2 + 1);

                InfoMap.Add(prop_name, prop_value);

                InfoStr.Remove(0, p + 1);
                InfoStr = InfoStr.Trim();
            }

            return InfoMap;
        }
Ejemplo n.º 5
0
        public override 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( ";Name::"+ Name + ";;;;_\n" );
            if (Name == "_PropertyChanged")
            {
                if ((Arguments == null) || (Arguments.GetCount() != 2))
                {
                    throw new ktError("kactalk::_PropertyChanged() : Didn't get the two nnede arguments!",
                                      ktERR.MISSING);
                }
            #if Debug
            ktDebug.Log( "Args::" + Arguments.Get_R( "\t", true ) );
            #endif

                Name = Arguments.Get("Name").Node.Value.ToString();
                ktValue Value = (ktValue)Arguments.Get("Value").Node.Value;

                SetProperty(Name, Value);

                return ktValue.Null;
            }
            else /*if (Name.StartsWith( "operator", out Name )) {
                return HandleOperator( Name, Arguments );
            } else */
            {
                throw new ktError("Couldn't find the method '" +
                                  Name + "' in class '" + m_Name + "'.", ktERR._404);
            }
        }
Ejemplo n.º 6
0
        public override ktValue SetProperty(ktString Name, ktValue Value)
        {
            if ((Name == "this") || (Name == "_this") ||
                (Name == "object") || (Name == "_object") ||
                (Name == "_") || (Name.IsEmpty()))
            {
                /*try {
                    m_Value = Convert.ToInt32( Value.ToString() );
                } catch (Exception E) {
                    if (E.GetType() == typeof( System.FormatException )) {
                        throw new ktError( "kactalkClass::CreateObject: Cant make '" + Value + "' into an integer", ktERR.WRONGTYPE );
                    }
                }*/
            } /*else if (Name == "MathMode") {
            //				m_Value.MathMode = (((ktClass)Value.Value).ToString().ToLower() == "true");
                m_Value.MathMode = Value.ToBool();
            } */else
            {
                throw new ktError("Couldn't find the property '" +
                                  Name + "' in class '" + m_Name + "'.", ktERR._404);
            }

            return GetProperty("_");
        }
Ejemplo n.º 7
0
        public virtual ktValue _RunMethod(ktString Name, ktList Arguments)
        {
            //ktDebug.Log( "ktClass::_RM( " + Name + " );" );
            if (Name.IsEmpty())
            {
                throw new ktError("Didn't get the name of the method to run in class '" +
                                m_Name + "'.", ktERR.NOTSET);
            }

            if (m_Methods == null)
            {
                throw new ktError("Couldn't find the method '" +
                                  Name + "' in class '" + m_Name + "'.", ktERR._404);
            }

            ktNode Node = m_Methods.GetNode(Name);
            if ((Node == null) || (Node.Value == null))
            {
                throw new ktError("Couldn't find the method '" +
                                  Name + "' in class '" + m_Name + "'.", ktERR._404);
            }

            ktValue Value = ktValue.Null;
            ktFunction Func = (ktFunction)Node.Value;

            Value = Func.Run(Arguments);

            return Value;
        }
Ejemplo n.º 8
0
        public virtual ktValue SetProperty(ktString Name, ktValue Value)
        {
            if (Name.IsEmpty())
            {
                throw new ktError("Didn't get the name of the property to change in class '" +
                                m_Name + "'.", ktERR.NOTSET);
            }

            if (m_Properties == null)
            {
                m_Properties = new ktList();
            }

            ktNode Node = m_Properties.GetNode(Name);

            if ((Node == null) || (Node.Value == null))
            {
                if (m_AddIfNotSet)
                {
                    return AddProperty(Name, Value);
                }
                else
                {
                    throw new ktError("Couldn't find the property '" +
                                      Name + "' in class '" + m_Name + "'.", ktERR._404);
                }
            }
            else
            {
                ktValue Prop = (ktValue)Node.Value;

                if (Prop.Constant)
                {
                    throw new ktError("The property '" + Name + "' in class '" +
                            m_Name + "' is a constant and can't be changed.", ktERR.CONST);
                }
                else if (Value == null)
                {
                    // HUM???
                    Prop.Value = null;
                }
                else
                {
                    Prop.SetValue(Value);
                }

                return Prop;
            }
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Export the list...
        /// </summary>
        public override string Export()
        {
            ktString Str = new ktString("(");
            ktString Name = new ktString(), Value = new ktString();
            bool First = true;

            Reset();

            foreach (ktList List in this)
            {
                Name = "";
                Value = "";

                if (!First)
                {
                    Str += ", \n";
                }
                else
                {
                    First = false;
                }

                if (List.Node != null)
                {
                    Name = List.Node.Name;
                    Value = List.Node.ExportValue();
                }

                if (!Name.IsEmpty())
                {
                    if ((!Value.IsEmpty()) && (Value != ":null") && (!List.IsEmpty()))
                    {
                        //Name = "[\"" + Name + "\"," + Value + "]";
                    }
                    else
                    {
                        //Name = "\"" + Name + "\"";
                        //Name.Append( new ktString( Name.Len() ) );
                    }
                }
                else if (!Value.IsEmpty())
                {
                    Name = Value;
                    Value = "";
                }

                if (!List.IsEmpty())
                {
                    Value = List.Export();
                }
                else if ((Value.IsEmpty()) && (Name.IsEmpty()))
                {
                    Value = ":null";
                    //Value = "\"" + Value + "\"";
                }

                if (!Name.IsEmpty())
                {
                    Str += Name;
                    if (!Value.IsEmpty())
                    {
                        Str += " => " + Value;
                    }
                }
                else
                {
                    Str += Value;
                }
            }

            Str += ")";

            return Str;
            //return Get_R( Prefix, false );
        }
Ejemplo n.º 11
0
        protected void CallCallback(ktString Method)
        {
            if (Method.IsEmpty() || (m_Callback == null))
            {
                return;
            }

            ktList Args = new ktList();
            Args.Add("Name", Name);
            Args.Add("Value", this);

            try
            {
                m_Callback.RunMethod("_" + Method, Args);
            }
            catch (ktError Err)
            {
                if ((Err.ErrorNumber != ktERR._404) && (Err.ErrorNumber != ktERR.NOTDEC))
                {
                    throw Err;
                }
            }
        }
Ejemplo n.º 12
0
        public bool SetName(ktString Name)
        {
            if (Name.IsEmpty())
            {
                return false;
            }

            m_Name = Name;

            return true;
        }
Ejemplo n.º 13
0
        public static ktList Replace(ktList Replacements, ktString Haystack)
        {
            ktList Results = new ktList();
            ktString Pattern = new ktString();
            ktString Replacement = new ktString();
            ktRE_MatchEvaluator Ev = null;
            ktNode Node;
            ktString Result = "";
            object First = null, Second = null;

            Replacements.Reset();
            foreach (ktList Post in Replacements)
            {
                if (Post.IsEmpty())
                {
                    if ((Post.Node != null) && (Post.Node.Value != null))
                    {
                        Pattern = Post.Node.Name;
                        if ((Post.Node.Value.GetType() == typeof(ktString)) ||
                            (Post.Node.Value.GetType() == typeof(string)))
                        {
                            Replacement = Post.Node.Value.ToString();
                            Results.Add(Replace(Pattern, Haystack, Replacement));
                        }
                        else if (Post.Node.Value.GetType() == typeof(ktRE_MatchEvaluator))
                        {
                            Ev = (ktRE_MatchEvaluator)Post.Node.Value;
                            Results.Add(Replace(Pattern, Haystack, Ev));
                        }
                        else if (Post.Node.Value.GetType() == typeof(ktRegEx))
                        {
                            //ktRegEx RE = (ktRegEx)Post.Node.Value;
                            if (Pattern.IsEmpty())
                            {
                                //Results.Add( RE.Replace( Haystack, Ev ) );
                            }
                            else
                            {
                                //Results.Ad‭d( Replace( Pattern, Haystack, Ev ) );
                            }
                        }
                    }
                }
                else if (Post.Count == 2)
                {
                    if ((Node = Post.GetNode(0)) != null)
                    {
                        First = Node.Value;
                        if ((Node = Post.GetNode(1)) != null)
                        {
                            Second = Node.Value;
                        }
                    }
                    if (Second != null)
                    {
                        if (First.GetType() == typeof(ktRegEx))
                        {
                            Result = HandleRegExFirst((ktRegEx)First, Second, Haystack);
                            Results.Add(Result);
                        }
                        else if (First.GetType() == typeof(ktString[]))
                        {
                            ktString[] Patterns = (ktString[])First;

                            foreach (ktString P in Patterns)
                            {
                                Result = HandleStringFirst(P, Second, Haystack);
                                Results.Add(Result);
                            }
                        }
                        else if (First.GetType() == typeof(ktList))
                        {
                            ktList Patterns = (ktList)First;

                            foreach (ktList P in Patterns)
                            {
                                if ((P.Node != null) && (P.Node.Value != null))
                                {
                                    Pattern = P.Node.Value.ToString();
                                    Result = HandleStringFirst(Pattern, Second, Haystack);
                                    Results.Add(Result);
                                }
                            }
                        }
                        else /*if ((First.GetType() == typeof( ktString )) ||
                            (First.GetType() == typeof( string )))*/
                        {
                            Result = HandleStringFirst(First.ToString(), Second, Haystack);
                            Results.Add(Result);
                        }
                    }
                }
            }

            return Results;
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Scan/Parse the script into tokens
        /// </summary>
        public bool Scan(ktString Script, ktString Name)
        {
            bool Ret = true;

            Script.Replace("\r\n", "\n",true);

            // Initiate the lineno.
            m_CurLine = 1;
            m_CharPos = 1;
              // .. and name
            m_Name = Name;

            if (m_Tokens != null)
            {
                m_Tokens.Clear();
                m_Tokens = null;
            }

            // Init...
            ktString Line = new ktString();
            int Pos = 0;
            Script.Trim();
            ktRegEx RE = new ktRegEx(ktToken.Separators);

            // ... the block-stack
            if (m_BlockStack != null)
            {
                m_BlockStack.Clear();
                m_BlockStack = null;
            }
            m_BlockStack = new ktList();
            // ... the token-list
            if (m_Tokens != null)
            {
                m_Tokens.Clear();
                m_Tokens = null;
            }
            m_Tokens = new ktList();
            m_Tokens.Node = new ktNode("ktTStatement", new ktToken(ktTokenType.Statement, "", 0, 0));
            // ... the token-stack
            if (m_TokenStack != null)
            {
                m_TokenStack.Clear();
                m_TokenStack = null;
            }
            m_TokenStack = new ktList();
            // ... the lines (??)
            if (m_Lines != null)
            {
                m_Lines.Clear();
                m_Lines = null;
            }
            m_Lines = new ktList();
            m_Lines.Node = new ktNode(Name, m_CurToken = new ktToken(ktTokenType.Program, Name, 0, 0));
            // ... the line-stack
            if (m_LineStack != null)
            {
                m_LineStack.Clear();
                m_LineStack = null;
            }
            m_LineStack = new ktList();

            if (m_MainBlock == null)
            {
                m_MainBlock = new ktBlock(new ktList());
            }
            else
            {
                if (m_MainBlock.Lines != null)
                {
                    m_MainBlock.Lines.Clear();
                }
                m_MainBlock.ClearKTSymbols();
            }
            m_MainBlock.SetMain(this);

            m_BlockStack.Add("ktTBlock", m_MainBlock);

            /* In the "original scanner" (C++), we took one line (terminated by \n)
             * 	at a time and worked on, now we just go through the line.
             * And We hope that it will be much "leaner"!
             */
            // Go on until the there's nothing left...
            while (!Script.IsEmpty())
            {
                // Get the position for the next separator
                Pos = RE.Find(Script);

                // If there was none...
                if (Pos < 0)
                {
                    // Take it to the end...
                    Pos = Script.Len();
                }
                else if (Pos == 0)
                {
                    Pos++;
                }
                // Get the next "token"
                Line = Script.SubStr(0, Pos);

                // If it's the start of a comment
                if ((Line == "/") && (Script.StartsWith("//") || Script.StartsWith("/*")))
                {
                    Line = Script.SubStr(0, 2);
                    Pos++;
                }
                else if ((Line == "*") && (Script.StartsWith("*/")))
                {
                    Line = "*/";
                    Pos++;
                }

                ReactOnToken(Line, m_CurLine, ref m_CharPos);

                if (Line == "\n")
                {
                    m_CurLine++;
                    m_CharPos = 1;
                }
                else
                {
                    m_CharPos += Line.Len();
                }

                // Remove the "token", we just worked on...
                Script.Remove(0, Pos);
            }

            #if ParseDebug || DebugXML
            ktDebug.Log("XML111111:");
            ktDebug.Log(ktXML.FromList(m_TokenStack).AsXML());
            ktDebug.Log("==================");
            ktDebug.Log(ktXML.FromList(m_Tokens).AsXML());
            #endif
            if (!m_Tokens.IsEmpty())
            {
                if (m_AllowMissingEOL)
                {
                    ((ktToken)m_Tokens.Node.Value).Type = ktTokenType.Line;
                    ((ktToken)m_Tokens.Node.Value).Name = m_Tokens.Node.Name = "ktTLine";
                    m_LineStack.AddList(m_Tokens);

                    m_Tokens = null;
                }
                else
                {
                    throw new ktError("Expected a ktTEOL at line " + m_CurLine.ToString() + " but didn't find one!",
                                      ktERR.MISSING);
                }
            }
            if (m_BlockStack.Count > 1)
            {
                throw new ktError("Expecting ktTEOB (}) at " + m_CharPos.ToString() + ", line " +
                                    m_CurLine.ToString() + ".", ktERR.MISSING);
            }

            //ktToken.OnlyExportValue = false;
            //ktDebug.Log( m_LineStack.Get_R(  ) );
            //ktToken.OnlyExportValue = false;
            #if ParseDebug || DebugXML
            ktDebug.Log( "XML:" );
            ktDebug.Log( ktXML.FromList(m_LineStack).AsXML() );
            ktDebug.Log( "==================" );
            ktDebug.Log( ktXML.FromList(m_Lines).AsXML() );
            #endif

            /*			ktDebug.Log( "?+++++\n" + m_Tokens.Get_R( "\t", true ) );
            ktDebug.Log( "?+++++\n" + m_CurToken.Export
            if (m_CurToken != null) {
                if (m_CurToken.Type == ktTokenType.List) {
                    throw new ktError( "Expected a ktTEndPar at line " + m_CurLine.ToString() + " but didn't find one!",
                                      ktERR.MISSING );
                } else if (m_CurToken.Type == ktTokenType.String) {
                    throw new ktError( "Expected a ktTStringQuot at line " + m_CurLine.ToString() + " but didn't find one!",
                                      ktERR.MISSING );
                } else if (m_CurToken.Type == ktTokenType.Block) {
                    throw new ktError( "Expected a ktTEndOfBlock at line " + m_CurLine.ToString() + " but didn't find one!",
                                      ktERR.MISSING );
                }
            } else if ((m_Tokens != null) && (!m_Tokens.IsEmpty())) {
                throw new ktError( "Expected a ktTEOL at line " + m_CurLine.ToString() + " but didn't find one!",
                                  ktERR.MISSING );
            }
            */
            //			MakeATree( );
            //			MakeAOpTree( );

            if ((m_BlockStack == null) || (m_BlockStack.IsEmpty()))
            {
                return Ret;
            }

            ktBlock Block = (ktBlock)(m_BlockStack.Pop().Node.Value);
            #if ParseDebug
            ktDebug.Log( "BLOCK1:" + ktXML.FromList(Block.Lines).AsXML() );r
            #endif

            MakeATree();
            #if ParseDebug
            ktDebug.Log("BLOCK2:" + ktXML.FromList(m_Lines).AsXML());
            #endif
            Block.Lines = MakeAOpTree();

            m_LineStack.Clear();
            m_LineStack = null;

            // Add Current "statement"/"post" to the block and theń switch them
            //Temp.AddList( m_Tokens );
            //m_Tokens = Temp;
            #if ParseDebug
            ktDebug.Log( "BLOCK:" + ((Block == m_MainBlock) ? "MAIN":"NOT_MAIN") );
            #endif
            /*ktList Temp = null;

            if (LastBlockLines == null) {
                throw new ktError( "No Last Block Lines!", ktERR.MISSING );
            }
            LastBlockLines.Add( "ktTBlock", new ktToken( Block, m_CurToken.LineNo, m_CurToken.CharPos ) );*/
            #if ParseDebug || DebugXML
            ktDebug.Log( "XML_After Tree:" + ktXML.FromList(Block.Lines).AsXML() );
            ktDebug.Log( "XML_After Tree:" + Block.Lines.Get_R( "\t", true ) );
            #endif
            //ktDebug.Log( m_Lines.Export() );

            return Ret;
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Get a variable
        /// </summary>
        public ktValue GetVariable(ktString Name)
        {
            if (Name.IsEmpty())
            {
                return null;
            }

            ktValue Var = null;

            try
            {
                if (m_Variables != null)
                {
                    ktNode Node = m_Variables.GetNode(Name);

                    if ((Node != null) && (Node.Value != null))
                    {
                        Var = (ktValue)Node.Value;
                    }
                }
            }
            catch (ktError E)
            {
                if (!((E.ErrorNumber == ktERR.NOTFOUND) || (E.ErrorNumber == ktERR.NOTDEF)))
                {
                    throw E;
                }
            }

            if (Var == null)
            {
                throw new ktError("kactalk::GetVariable() : There's no variable with the name '" +
                                  Name + "'!", ktERR.NOTDEF);
            }

            return Var;
        }
Ejemplo n.º 16
0
        public virtual ktContext GetContext(ktString Name)
        {
            if (Name.IsEmpty())
            {
                throw new ktError("Didn't get the name of the context to get in the module '" +
                                  m_Name + "'.", ktERR.NOTSET);
            }

            if (m_Contexts == null)
            {
                throw new ktError("Couldn't find the context '" + Name + "', in module '" +
                                  m_Name + "'.", ktERR.NOTFOUND);
            }

            ktNode Node = null;

            try
            {/*
                Node = m_Contexts.GetNode( Name );
                Node.HasError(); // Error Trigger??*/

                ktContext Con = null;

                m_Contexts.Reset();
                foreach (ktList CL in m_Contexts)
                {
                    if ((CL == null) || (CL.Node == null) || (CL.Node.Value == null) ||
                            (CL.Node.Value.GetType() == typeof(ktContext)))
                    {
                        continue;
                    }
                    Con = (ktContext)CL.Node.Value;

                    if ((Con.Name == Name) || (Con.Aliases.Contains(":" + Name + ":")))
                    {
                        return Con;
                    }
                }
                Node.HasError(); // Error Trigger??
            }
            catch (Exception)
            {
                throw new ktError("Couldn't find the context '" + Name + "', in module '" +
                                  m_Name + "'.", ktERR.NOTFOUND);
            }

            return (ktContext)Node.Value;
        }
Ejemplo n.º 17
0
        public virtual ktFunction GetMethod(ktString Name)
        {
            if (Name.IsEmpty())
            {
                throw new ktError("Didn't get the name of the method to find in class '" +
                                m_Name + "'.", ktERR.NOTSET);
            }

            if (m_Methods == null)
            {
                throw new ktError("Couldn't find the method '" +
                                  Name + "' in class '" + m_Name + "'.", ktERR._404);
            }

            ktNode Node = m_Methods.GetNode(Name);
            if ((Node == null) || (Node.Value == null))
            {
                throw new ktError("Couldn't find the method '" +
                                  Name + "' in class '" + m_Name + "'.", ktERR._404);
            }

            ktFunction Func = (ktFunction)Node.Value;

            return Func;
        }
Ejemplo n.º 18
0
        protected ktValue HandleCompAssignment(ktList Target, ktValue Value)
        {
            bool Constant = false, Hard = false;
            ktString Name = new ktString(), ClassName = null;
            ktToken Token = null;
            ktClass Class = null;
#if Debug
	ktDebug.Log( "HCAHCAHCAHCAHCAHCAHCAHCAHCAHCAHCAHCAHCAHCA" );
#endif
            ktDebug.Log("HCA: V:" + Value.Export() + "\n" + Target.Get_R());
            Target.Reset();
            foreach (ktList L in Target)
            {
                if ((L.Node == null) || (L.Node.Value == null))
                {
                    continue;
                }

                Token = (ktToken)L.Node.Value;
#if Debug
	ktDebug.Log( "HCA:" + Token.ToString() );
#endif

                switch (Token.Type)
                {
                    case ktTokenType.Const:
                        {
                            if (Constant)
                            {
                                throw new ktError("Unexpected " + Token.ToString() + " on line " +
                                                      Token.LineNo.ToString() + " by character " +
                                                      Token.CharPos.ToString() + "!",
                                                  ktERR.UNEXP);
                            }

                            Constant = true;
                            break;
                        }
                    case ktTokenType.Hard:
                        {
                            if (Hard)
                            {
                                throw new ktError("Unexpected " + Token.ToString() + " on line " +
                                                      Token.LineNo.ToString() + " by character " +
                                                      Token.CharPos.ToString() + "!",
                                                  ktERR.UNEXP);
                            }

                            Hard = true;
                            break;
                        }
                    case ktTokenType.Id:
                        {
                            if (!Name.IsEmpty())
                            {
                                try
                                {
                                    Class = GetClass(Name);
                                    ClassName = Name;
                                    Hard = true;
                                } catch (Exception) {
                                    throw new ktError("Unexpected " + Token.ToString() + " (" +
                                                          Token.Value + ") on line " +
                                                          Token.LineNo.ToString() + " by character " +
                                                          Token.CharPos.ToString() + "!",
                                                      ktERR.UNEXP);
                                }
                            }

                            Name = Token.Value;
                            break;
                        }
                }
            }

            Value.Constant = Constant;
            Value.HardType = Hard;
            if (!Value.IsNull())
            {
                ((ktClass)Value.Value).HardType = Hard;
                ((ktClass)Value.Value).IsConstant = Constant;
            }

            if (Class != null)
            {
                ktList Arg = new ktList();
                ktClass Obj = Class.CreateObject();
                Obj.HardType = Hard;
                Obj.IsConstant = Constant;

                if (!Value.IsNull())
                {
                    Arg.Add(Value);
                    Obj.RunMethod("Assign", Arg);
                }

                Value = new ktValue(Name, ClassName, Obj, Hard, Constant); 
            }

            SetVariable(Name, true, Value, true, true);

            return Value;
        }
Ejemplo n.º 19
0
        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;
        }
Ejemplo n.º 20
0
        public ktValue GetVariable(ktString Name)
        {
            if (Name.IsEmpty())
            {
                return null;
            }

            ktValue Var = null;

            try
            {
                if (m_Variables != null)
                {
                    ktNode Node = m_Variables.GetNode(Name);

                    if ((Node != null) && (Node.Value != null))
                    {
                        Var = (ktValue)Node.Value;
                    }
                }
            }
            catch (Exception) { }

            if (Var == null)
            {
                if (m_Parent != null)
                {
                    Var = m_Parent.GetVariable(Name);
                }
                else if (m_Main != null)
                {
                    Var = m_Main.GetVariable(Name);
                }
            }

            return Var;
        }
Ejemplo n.º 21
0
        public virtual ktValue _GetProperty(ktString Name, bool Copy)
        {
            ktValue Value = ktValue.Null;

            if (Name.IsEmpty())
            {
                return Value;
            }

            if (m_Properties == null)
            {
                throw new ktError("Couldn't find the property '" +
                                  Name + "' in class '" + m_Name + "'.", ktERR._404);
            }

            ktNode Node = m_Properties.GetNode(Name);
            if ((Node == null) || (Node.Value == null))
            {
                throw new ktError("Couldn't find the property '" +
                                  Name + "' in class '" + m_Name + "'.", ktERR._404);
                //return Value;
            }

            if (Copy)
            {
                Value = new ktValue((ktValue)Node.Value);
            }
            else
            {
                Value = (ktValue)Node.Value;
            }

            return Value;
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Set the value of a variable
        /// </summary>
        /// <param name="Name">The name of the variable to set</param>
        /// <param name="Value">The value to give the variable</param>
        /// <param name="Add">Add the variable if it doesn't exists</param>
        /// <param name="Copy">Copy the value</param>
        /// <param name="IgnoreConstant">Ignore whether the var is constant (only used externally!)</param>
        /// <param name="ABKT">Is this variable added by KT/a script</param>
        /// <returns></returns>
        public bool SetVariable(ktString Name, ktValue Value, bool Add, bool Copy,
                                    bool IgnoreConstant, bool ABKT)
        {
            // Nothing to use??
            if (Name.IsEmpty() || (Value == null))
            {
                return false;
            }
#if Debug
	ktDebug.Log( "SetVariable( " + Name + ", " + Value.ToString() + ", " + Add.ToString() + ", " + Copy.ToString() + " )" );
#endif

            if (Copy)
            {
                Value = Value.CopyValue();
                Value.Name = Name;
            }

            ktValue Var = null;
            // Catch errors...
            try
            {
                // try to get Variable
                Var = GetVariable(Name);

                if ((!IgnoreConstant) && (Var.Constant))
                {
                    throw new ktError("You are trying to assign a value to " + Name +
                                        ", which is a constant!", ktERR.CONST);
                }

                // Set value...
                Var.SetValue(Value);
            }
            catch (ktError Err)
            {
                // If the error is due to nonexisting var??
                if ((Err.ErrorNumber == ktERR.NOTDEF) || (Err.ErrorNumber == ktERR.NOTFOUND))
                {
                    // Should we add?
                    if (Add)
                    {
                        // Set name
                        Value.Name = Name;
                        // Add...
                        return AddVariable(Value, ABKT);
                    }
                }

                // If we reach this, something went wrong or we just wasn't alloweed to add
                //  the variable...
                throw Err;
            }

            // Ok!?!?!
            return true;
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Returns a property of this class, matching 'Name'.
        /// </summary>
        public override ktValue _GetProperty(ktString Name, bool Copy)
        {
            //ktDebug.Log( "kactalkclass::_GP( " + Name+ " )" );
            if ((Name == "this") || (Name == "_this") ||
                (Name == "object") || (Name == "_object") ||
                (Name == "_") || (Name.IsEmpty()))
            {
                return new ktValue(m_Name, "kactalk", this, true, false);
            }
            switch (Name)
            {
                case "MathMode":
                    {
                        return new ktValue(Name, "bool", m_Value.MakeObjectOf("ktBool", m_Value.MathMode), true, false, this);
                    }
            }

            throw new ktError("Couldn't find the property '" +
                              Name + "' in class '" + m_Name + "'.", ktERR._404);
        }
Ejemplo n.º 24
0
        public ktValue RunFunction(ktString Name, ktList Arguments)
        {
            ktValue Ret = ktValue.Null;
            ktNode Node = null;
            bool NotFound = false;
#if Debug
	ktDebug.Log( "RFRFRFRFRFRFRFRFRFRFRFRRFRF" );
#endif
            if (Name.IsEmpty())
            {
                throw new ktError("ktBlock::RunFunction() : Didn't get the name of the method to run.", ktERR.NOTSET);
            }

            if ((m_Functions == null) || (m_Functions.Count == 0))
            {//ktDebug.Log( "HC::NFunc!!\n");
                NotFound = true;
            }
            else
            {
                Node = m_Functions.GetNode(Name);

                if (Node != null)
                {
                    ktFunction Meth = (ktFunction)Node.Value;

                    return Meth.Run(Arguments);
                }
                else
                {
                    NotFound = true;
                }
            }

            if (NotFound)
            {
                if (m_Parent != null)
                {
                    return m_Parent.RunFunction(Name, Arguments);
                }
                else if (m_Main != null)
                {
                    return m_Main.RunFunction(Name, Arguments);
                }
                else
                {
                    throw new ktError("ktBlock::RunFunction() : Couldn't find the function '" +
                                      Name + ".", ktERR.NOTFOUND);
                }
            }

            return Ret;
        }
Ejemplo n.º 25
0
        public override ktValue _GetProperty(ktString Name, bool Copy)
        {
            //ktDebug.Log( "kactalkclass::_GP( " + Name+ " )" );
            if ((Name == "this") || (Name == "_this") ||
                (Name == "object") || (Name == "_object") ||
                (Name == "_") || (Name.IsEmpty()))
            {
                return new ktValue(m_Name, "kactalk", this, true, false);
            }/*
            switch (Name) {
            }*/

            throw new ktError("Couldn't find the property '" +
                              Name + "' in class '" + m_Name + "'.", ktERR._404);
        }
Ejemplo n.º 26
0
        public ktFunction GetFunction(ktString Name)
        {
            ktFunction Func = null;
            ktNode Node = null;
            bool NotFound = false;
#if Debug
	ktDebug.Log( "GFGFGFGFGFGFGFGFGFGFGFGGFGF(" + Name + ")" );
#endif
            if (Name.IsEmpty())
            {
                throw new ktError("ktBlock::GetFunction() : Didn't get the name of the method to find.", ktERR.NOTSET);
            }

            if ((m_Functions == null) || (m_Functions.Count == 0))
            {//ktDebug.Log( "HC::NFunc!!\n");
                NotFound = true;
            }
            else
            {
                Node = m_Functions.GetNode(Name);

                if (Node != null)
                {
                    Func = (ktFunction)Node.Value;
                }
                else
                {
                    NotFound = true;
                }
            }

            if (NotFound)
            {
                if (m_Parent != null)
                {
                    Func = m_Parent.GetFunction(Name);
                }
                else if (m_Main != null)
                {
                    Func = m_Main.GetFunction(Name);
                }
                else
                {
                    throw new ktError("ktBlock::GetFunction() : Couldn't find the function '" +
                                      Name + ".", ktERR.NOTFOUND);
                }
            }

            return Func;
        }
Ejemplo n.º 27
0
        public ktClass GetClass(ktString Name)
        {
            if (Name.IsEmpty())
                return null;

            ktNode Node = null;
            
            if (m_Classes != null)
                Node = m_Classes.GetNode(Name);

            if (Node == null)
            {
                if (m_Parent != null)
                {
                    return m_Parent.GetClass(Name);
                }
                else if (m_Main != null)
                {
                    return m_Main.GetClass(Name);
                }
            }

            return (ktClass)Node.Value;
        }
Ejemplo n.º 28
0
        public ktIntObj MakeObjectOf(ktString Name, object Value)
        {
            if (Name.IsEmpty())
            {
                return null;
            }
            if (m_Main != null)
            {
                try
                {
                    ktClass Class = m_Main.GetClass(Name);

                    if (Class == null)
                    {
                        return null;
                    }
                    /**#if Debug
                        ktDebug.Log( "=0==0====00===0000==0000==0000===0000==0" );
                    #endif/**/
                    ktClass Class2 = Class.CreateObject(Value);
                    return Class2;
                }
                catch (ktError Err)
                {
#if Debug
Console.WriteLine( "MOOo:ERR" );
	ktDebug.Log( Err.ToString( ) );
	ktDebug.Log( Err.StackTrace );
#endif
                    return null;
                }
            }
            return null;
        }
Ejemplo n.º 29
0
        public ktString AsXML(bool IncludeDeclaration, ktString Prefix)
        {
            // Define the variable to store the xml-structure
            ktString XML = new ktString();

            // Should we include the XML-declaration
            if (IncludeDeclaration)
            {
                // Do so...
                XML = Prefix + "<?xml version=\"" + m_Version + "\" encoding=\"" + m_Encoding + "\"?>\n";
            }

            // Define...
            ktString StartElm = "", EndElm = "", Content = "", Name = "";
            bool First = true;

            // If the list has info...
            if (m_Node != null)
            {
                // Add beginning
                StartElm = Prefix + "<";
                EndElm = "</";

                Name.SetValue(m_Node.Name);
                Name.Trim();

                // No name??
                if (Name.IsEmpty())
                {
                    StartElm += "NN";
                    EndElm += "NN";
                    // Yippie, name...
                }
                else
                {
                    // Add name
                    StartElm += Name;
                    EndElm += Name;
                }

                // Add end...
                StartElm += ">";
                EndElm += ">";

                // If the list has a value
                if (m_Node.Value != null)
                {
                    // Special, just for blocks...
                    if (m_Node.Value.GetType() == typeof(ktBlock))
                    {
                        ktList L = ((ktBlock)m_Node.Value).Lines;
                        if (L != null)
                        {
                            // Get it...
                            Content = ktXML.FromList(L).AsXML(IncludeDeclaration, m_Prefix + Prefix);
                        }
                    }
                    else if ((m_Node.Value.GetType() == typeof(ktToken)) &&
                              (((ktToken)m_Node.Value).Type == ktTokenType.Block))
                    {
                        if (((ktToken)m_Node.Value).Block == null)
                        {
                            goto EndOfNode;
                        }
                        ktList L = ((ktToken)m_Node.Value).Block.Lines;
                        if (L != null)
                        {
                            // Get it...
                            Content = ktXML.FromList(L).AsXML(IncludeDeclaration, m_Prefix + Prefix);
                        }
                    }
                    else
                    {
                        // Get it...
                        Content = m_Node.Value.ToString();
                    }
                }
                // No node info...
            }
            else
            {
                // Use default...
                StartElm = Prefix + "<POST>";
                EndElm = "</POST>";
            }

            EndOfNode:

            // Little "hack" if it,s the "first level"
            if (Prefix.IsEmpty())
            {
                First = false;
            }

            // Go thrugh the child nodes
            foreach (ktXML N in this)
            {
                // If it's the first
                if (First)
                {
                    // If content isn't empty
                    if (!Content.IsEmpty())
                    {
                        // Add approiate prefixes...
                        Content = Prefix + m_Prefix + Content + "\n"/* + Prefix*/;
                    }
                    // No more first...
                    First = false;
                }

                // Get the childs xml-structure (extended prefix and no XML-decl.)
                Content += N.AsXML(false, Prefix + m_Prefix) + "\n";
            }

            // Remove trialing newlines
            Content.Trim(ktStripType.trailing, "\n");

            // If the "content"/structure contains newlines or elements
            if ((!Content.IsEmpty()) && (Content.Contains("\n") || Content.Contains("<")))
            {
                // Add newline after start-element
                StartElm = StartElm + "\n";

                // hum... Add newline if the content doesn't end with one!?
                if ((!Content.StartsWith("\n")) && (Content.Last() != '\n'))
                {
                    Prefix.Prepend("\n");
                }

                // Add Prefix before end-element and a newline after..
                EndElm = Prefix + EndElm + "\n";
            }

            // Put together start content/childs and end element...
            XML += StartElm + Content + EndElm;

            // Done.. Return the structure
            return XML;// + Get_R();
        }
Ejemplo n.º 30
0
        /// <summary>
        /// Get a context
        /// </summary>
        public ktContext GetContext(ktString Name)
        {
            if (Name.IsEmpty() || (m_Modules == null))
            {
                return null;
            }

            ktContext Context = null;
            ktModule Module = null;

            m_Modules.Reset();
            //while ((Curr) && (!Context)) {
            foreach (ktList ML in m_Modules)
            {
                if ((ML.Node == null) || (ML.Node.Value == null))
                {
                    continue;
                }
                Module = (ktModule)ML.Node.Value;

                try
                {
                    Context = Module.GetContext(Name);

                    if (Context != null)
                    {
                        return Context;
                    }
                }
                catch (ktError Err)
                {
                    if (Err.ErrorNumber != ktERR.NOTFOUND)
                    {
                        throw Err;
                    }
                }
            }

            if (Context == null)
            {
                throw new ktError("Couldn't find the context '" + Name + "'.", ktERR.NOTFOUND);
            }

            return Context;
        }