コード例 #1
0
        private void GetFunctions()
        {
            for (var i = 0; i < Script.Length; i++)
            {
                if (Script[i] != '~' || Script[i + 1] != '(') continue;
                var func = Extract(Script.Substring(i));
                if (func.Item2 != -1)
                {
                    var functionString = func.Item1;

                    var indexOfColon = functionString.IndexOf(':');
                    var indexOfParenthesis = functionString.IndexOf('(');
                    var indexOfPeriod = functionString.IndexOf('|');

                    var functionName = functionString.Substring(0, indexOfColon);
                    //Console.WriteLine (FunctionName);
                    string[] functionParameters;
                    string functionContents;
                    if (indexOfPeriod != -1 && indexOfParenthesis > indexOfPeriod)
                    {
                        functionParameters = functionString.Substring(indexOfColon + 1, indexOfPeriod - indexOfColon - 1).Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Select(x => Prefix + x).ToArray();
                        functionContents = functionString.Substring(indexOfPeriod + 1);
                    }
                    else
                    {
                        functionParameters = new string[0];
                        functionContents = functionString.Substring(indexOfParenthesis);
                    }
                    var functionFixedParams = !functionParameters.Contains("...");
                    var axFunc = new AxFunction(functionParameters, functionContents, Prefix, functionFixedParams);
                    axFunc.GetDynamicTags();
                    Functions.Add(Prefix + functionName, axFunc);
                    if (axFunc.Tags.ContainsKey("EntryPoint"))
                    {
                        EntryPoint = functionName;
                    }

                    foreach (var t in axFunc.Tags.Where(t => Hooks.ContainsKey(t.Key)))
                    {
                        Hooks[t.Key].Call(this, axFunc);
                    }

                    i += func.Item2;
                }
                else
                {
                    Console.WriteLine("Invalid function");
                }
            }
        }