Ejemplo n.º 1
0
            public static SkryptObject ToJSON(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
            {
                var str   = TypeConverter.ToString(input, 0, engine);
                var json  = JsonConvert.DeserializeObject <Dictionary <string, string> >(str);
                var array = engine.Create <Array>();

                foreach (var kv in json)
                {
                    array.Table[kv.Key] = engine.Create <String>(kv.Value);
                }

                return(array);
            }
Ejemplo n.º 2
0
            public static SkryptObject ToHex(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
            {
                var n   = TypeConverter.ToNumeric(input, 0);
                var str = Sys.Convert.ToString((long)n, 16);

                return(engine.Create <String>(str));
            }
Ejemplo n.º 3
0
            public static SkryptObject Mod(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a = TypeConverter.ToNumeric(values, 0);
                var b = TypeConverter.ToNumeric(values, 1);

                return(engine.Create <Numeric>(a % b));
            }
Ejemplo n.º 4
0
        public static SkryptObject error(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
        {
            var s = TypeConverter.ToString(values, 0, engine);

            engine.ThrowError(s, engine.CurrentNode?.Token);

            return(engine.Create <Null>(s));
        }
Ejemplo n.º 5
0
            public static SkryptObject Lerp(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a = TypeConverter.ToNumeric(values, 0);
                var b = TypeConverter.ToNumeric(values, 1);
                var t = TypeConverter.ToNumeric(values, 2);

                return(engine.Create <Numeric>(a * (1 - t) + b * t));
            }
Ejemplo n.º 6
0
            public static SkryptObject Open(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var path = TypeConverter.ToString(values, 0, engine);

                var file = engine.Create <File>(path);

                return(file);
            }
Ejemplo n.º 7
0
            public static SkryptObject Clamp(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var x = TypeConverter.ToNumeric(values, 0);
                var a = TypeConverter.ToNumeric(values, 1);
                var b = TypeConverter.ToNumeric(values, 2);

                return(engine.Create <Numeric>(SysMath.Min(SysMath.Max(x, a), b)));
            }
Ejemplo n.º 8
0
            public static SkryptObject ToUTF16(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
            {
                var str = TypeConverter.ToString(input, 0, engine);

                byte[] bytes   = Sys.Text.Encoding.Default.GetBytes(str);
                var    encoded = Sys.Text.UnicodeEncoding.Unicode.GetString(bytes);

                return(engine.Create <String>(encoded));
            }
Ejemplo n.º 9
0
 public SkryptObject Replace(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
 {
     return(engine.Create <String>(
                ((String)self).Value.Replace(
                    TypeConverter.ToString(input, 0, engine),
                    TypeConverter.ToString(input, 1, engine)
                    )
                ));
 }
Ejemplo n.º 10
0
            public SkryptObject Explode(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
            {
                var delimiter  = TypeConverter.ToString(input, 0, engine);
                var selfString = ((String)self).Value;

                var exploded = !string.IsNullOrEmpty(delimiter) ?
                               selfString.Split(new string[] { delimiter }, Sys.StringSplitOptions.None) :
                               new string[] { selfString };

                var array = engine.Create <Array>();

                for (int i = 0; i < exploded.Length; i++)
                {
                    array.List.Add(engine.Create <String>(exploded[i]));
                }

                return(array);
            }
Ejemplo n.º 11
0
 public SkryptObject Find(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
 {
     return(engine.Create <Numeric>(
                ((String)self).Value.IndexOf(
                    TypeConverter.ToString(input, 0, engine),
                    (int)TypeConverter.ToNumeric(input, 1)
                    )
                ));
 }
Ejemplo n.º 12
0
            public SkryptObject Reverse(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
            {
                var s = (String)self;

                char[] charArray = s.Value.ToCharArray();
                Sys.Array.Reverse(charArray);

                return(engine.Create <String>(new string(charArray)));
            }
Ejemplo n.º 13
0
        public override ScopeContext Execute(SkryptEngine engine, SkryptObject self, SkryptObject[] parameters, ScopeContext scope)
        {
            SkryptObject returnValue = null;

            if (IsSkryptMethod)
            {
                returnValue = ((SkryptDelegate)Method)(engine, self, parameters);
            }
            else
            {
                var parCount = Method.Method.GetParameters().Count();

                var input = new object[parCount];

                for (int i = 0; i < input.Length; i++)
                {
                    if (i < parameters.Length)
                    {
                        input[i] = parameters[i];
                    }
                    else
                    {
                        input[i] = null;
                    }
                }

                returnValue = (SkryptObject)Method.DynamicInvoke(input);

                if (returnValue == null)
                {
                    returnValue = engine.Create <Null>();
                }
            }

            if (typeof(SkryptType).IsAssignableFrom(returnValue.GetType()))
            {
                returnValue.GetPropertiesFrom(engine.Executor.GetType(((SkryptType)returnValue).TypeName, scope));
            }

            var newScope = new ScopeContext {
                ParentScope = scope,
                Properties  = scope.Properties | ScopeProperties.InMethod
            };

            if (self != null)
            {
                newScope.SetVariable("self", self, Modifier.Const);
            }

            newScope.ReturnObject        = returnValue;
            newScope.ReturnObject.Engine = engine;
            newScope.Variables           = new Dictionary <string, Variable>(scope.Variables);

            return(newScope);
        }
Ejemplo n.º 14
0
            public static SkryptObject Range(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a = TypeConverter.ToArray(values, 0);

                var sorted = a.Sort(engine, a, null);

                double high = (Numeric)((Array)sorted).List.Last();
                double low  = (Numeric)((Array)sorted).List.First();

                return(engine.Create <Numeric>(high - low));
            }
Ejemplo n.º 15
0
            public static SkryptObject Mean(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a     = TypeConverter.ToArray(values, 0);
                var total = 0d;

                for (int i = 0; i < a.List.Count; i++)
                {
                    total += (Numeric)a.List[i];
                }

                return(engine.Create <Numeric>(total / a.List.Count));
            }
Ejemplo n.º 16
0
        public static SkryptObject print(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
        {
            var a = TypeConverter.ToAny(values, 0);
            var s = GetString(a, engine);

            if ((engine.Settings & EngineSettings.NoLogs) == 0)
            {
                Console.WriteLine(s);
            }

            return(engine.Create <String>(s));
        }
Ejemplo n.º 17
0
            public SkryptObject Read(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var s   = (File)self;
                var str = "";

                using (StreamReader streamReader = new StreamReader(s.Path)) {
                    str = streamReader.ReadToEnd();
                    streamReader.Close();
                }

                return(engine.Create <String>(str));
            }
Ejemplo n.º 18
0
            public SkryptObject GetBytes(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
            {
                var byteArray = Sys.Text.Encoding.ASCII.GetBytes(((String)self).Value);
                var array     = engine.Create <Array>();

                for (int i = 0; i < byteArray.Length - 1; i++)
                {
                    array.List.Add((Numeric)byteArray[i]);
                }

                return(array);
            }
Ejemplo n.º 19
0
            public SkryptObject Sum(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a = TypeConverter.ToArray(values, 0);
                var b = 0d;

                for (int i = 0; i < a.List.Count; i++)
                {
                    b += (Numeric)a.List[i];
                }

                return(engine.Create <Numeric>(b));
            }
Ejemplo n.º 20
0
            public static SkryptObject Parse(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
            {
                var s = TypeConverter.ToString(input, 0, engine);

                var p = double.TryParse(s, out double r);

                if (!p)
                {
                    throw new SkryptException("Invalid input format!");
                }

                return(engine.Create <Numeric>(r));
            }
Ejemplo n.º 21
0
            public SkryptObject PadLeft(SkryptEngine engine, SkryptObject self, SkryptObject[] input)
            {
                var a         = TypeConverter.ToNumeric(input, 0);
                var s         = TypeConverter.ToString(input, 1, engine);
                var newString = engine.Create <String>(((String)self).Value);

                while (newString.Value.Length < a)
                {
                    newString.Value = s + newString.Value;
                }

                return(newString);
            }
Ejemplo n.º 22
0
            public static SkryptObject Mode(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a = TypeConverter.ToArray(values, 0);
                var v = a.List;

                var query = v.GroupBy(x => ((Numeric)x).Value)
                            .Select(group => new { Value = group.Key, Count = group.Count() })
                            .OrderByDescending(x => x.Count);

                var item = query.First();

                return(engine.Create <Numeric>(item.Value));
            }
Ejemplo n.º 23
0
            public static SkryptObject SHA1(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var s = TypeConverter.ToString(values, 0, engine);

                var byteArray = Sys.Text.Encoding.ASCII.GetBytes(s.Value);
                var hashValue = new SHA1Managed().ComputeHash(byteArray);
                var array     = engine.Create <Array>();

                for (int i = 0; i < hashValue.Length; i++)
                {
                    array.List.Add((Numeric)hashValue[i]);
                }

                return(array);
            }
Ejemplo n.º 24
0
            public static SkryptObject Max(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a = TypeConverter.ToArray(values, 0);
                var b = -double.MaxValue;

                for (int i = 0; i < a.List.Count; i++)
                {
                    if ((Numeric)a.List[i] > b)
                    {
                        b = (Numeric)a.List[i];
                    }
                }

                return(engine.Create <Numeric>(b));
            }
Ejemplo n.º 25
0
                public static SkryptObject Request(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
                {
                    var address = TypeConverter.ToString(values, 0, engine);

                    var request = (HttpWebRequest)WebRequest.Create(address);

                    request.Credentials = CredentialCache.DefaultCredentials;
                    request.ContentType = "text/plain";
                    request.Timeout     = Timeout.Infinite;
                    request.Method      = "GET";
                    request.Accept      = "text/plain";
                    request.KeepAlive   = false;

                    HttpWebResponse response = null;

                    try {
                        response = (HttpWebResponse)request.GetResponse();
                    } catch (WebException e) {
                        return(engine.Create <String>(e.Status.ToString()));
                    }

                    // Get the stream containing content returned by the server.
                    var dataStream = response.GetResponseStream();
                    // Open the stream using a StreamReader for easy access.
                    var reader = new StreamReader(dataStream);
                    // Read the content.
                    string responseFromServer = reader.ReadToEnd();

                    // Display the content.
                    Console.WriteLine(responseFromServer);
                    // Clean up the streams and the response.
                    reader.Close();
                    response.Close();

                    return(engine.Create <String>(responseFromServer));
                }
Ejemplo n.º 26
0
        public static SkryptObject input(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
        {
            engine.Stopwatch.Stop();

            var a = TypeConverter.ToAny(values, 0);

            if ((engine.Settings & EngineSettings.NoLogs) == 0)
            {
                Console.WriteLine(a);
            }

            var input = Console.ReadLine();

            engine.Stopwatch.Start();

            return(engine.Create <String>(input));
        }
Ejemplo n.º 27
0
            public static SkryptObject Small(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a = (Array)TypeConverter.ToArray(values, 0).Clone(); // Copy array so we don't affect the original one by sorting it
                var k = TypeConverter.ToNumeric(values, 1);

                a.List.Sort((x, y) => {
                    if ((Numeric)x > (Numeric)y)
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                });

                return(engine.Create <Numeric>(a.List[a.List.Count - (int)k - 1]));
            }
Ejemplo n.º 28
0
            public static SkryptObject CountEmpty(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var a     = TypeConverter.ToArray(values, 0);
                var empty = 0;

                for (int i = 0; i < a.List.Count; i++)
                {
                    if (a.List[i] == null || a.List[i] == (String)"")
                    {
                        empty++;
                    }
                    else
                    {
                        empty--;
                    }
                }

                return(engine.Create <Numeric>(empty));
            }
Ejemplo n.º 29
0
            public SkryptObject Map(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var m = TypeConverter.ToMethod(values, 0);

                var newArray = engine.Create <Array>(((Array)self).List);

                if (m.GetType() == typeof(SkryptMethod) && m.Parameters.Count != 1)
                {
                    engine.ThrowError("Input function must have 1 parameter!");
                }

                var scope = SkryptMethod.GetPopulatedScope(m, new[] { new Null() });

                scope.ParentScope = engine.CurrentScope;
                var name = scope.Variables.Keys.First();

                for (int i = 0; i < newArray.List.Count; i++)
                {
                    var x = newArray.List[i];

                    scope.Variables[name].Value = x;

                    var r = m.Execute(engine, self, new[] { x }, scope);

                    ((Array)self).List[i] = scope.Variables[name].Value;
                }

                var iterator = new Dictionary <string, SkryptObject>(((Array)self).Table);

                foreach (var p in iterator)
                {
                    var x = p.Value;

                    scope.Variables[name].Value = x;

                    var r = m.Execute(engine, self, new[] { x }, scope);

                    newArray.Table[p.Key] = scope.Variables[name].Value;
                }

                return(newArray);
            }
Ejemplo n.º 30
0
            public static SkryptObject AESEncrypt(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var toEncrypt = TypeConverter.ToString(values, 0, engine);
                var password  = TypeConverter.ToString(values, 1, engine);

                var bytesToBeEncrypted = Sys.Text.Encoding.UTF8.GetBytes(toEncrypt);
                var passwordBytes      = Sys.Text.Encoding.UTF8.GetBytes(password);

                // Hash the password with SHA256
                passwordBytes = Sys.Security.Cryptography.SHA256.Create().ComputeHash(passwordBytes);

                byte[] encryptedBytes = null;

                // Set your salt here, change it to meet your flavor:
                // The salt bytes must be at least 8 bytes.
                byte[] saltBytes = new byte[] { 2, 64, 56, 76, 12, 10, 23, 5 };

                using (MemoryStream ms = new MemoryStream()) {
                    using (RijndaelManaged AES = new RijndaelManaged()) {
                        AES.KeySize   = 256;
                        AES.BlockSize = 128;

                        var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                        AES.Key = key.GetBytes(AES.KeySize / 8);
                        AES.IV  = key.GetBytes(AES.BlockSize / 8);

                        AES.Mode = CipherMode.CBC;

                        using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write)) {
                            cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
                            cs.Close();
                        }
                        encryptedBytes = ms.ToArray();
                    }
                }

                var result = Convert.ToBase64String(encryptedBytes);

                return(engine.Create <String>(result));
            }