private object _append(INakoFuncCallInfo info) { object ary = info.StackPop(); // 参照渡しなので変数への参照が得られる object s = info.StackPop(); if (!(ary is NakoVariable)) { throw new NakoPluginRuntimeException("『追加』の引数がvariableではありません"); } NakoVariable ary_link = (NakoVariable)ary; if (ary_link.Body is NakoVarArray) { NakoVarArray arr = (NakoVarArray)ary_link.Body; NakoVariable new_item = new NakoVariable(); new_item.SetBodyAutoType(s); arr.Add(new_item); }else if(ary_link.Body is string && (string)ary_link.Body==""){ NakoVarArray arr = new NakoVarArray(); NakoVariable new_item = new NakoVariable(); new_item.SetBodyAutoType(s); arr.Add(new_item); ary_link.SetBody(arr,NakoVarType.Array); } // 結果をセット return null; }
//Dictionary<string,object> objects = new Dictionary<string, object>(); public object _encode(INakoFuncCallInfo info) { object v = info.StackPop(); if(v is NakoVarArray){ NakoVarArray arr = (NakoVarArray)v; object objects = NakoVarArrayToArray(arr); return fastJSON.JSON.Instance.ToJSON(objects); // JavaScriptSerializer serializer = new JavaScriptSerializer(); // string s = serializer.Serialize(objects); } return null; }
public Object _sample_addEx(INakoFuncCallInfo info) { Object ar = info.StackPop(); Object b = info.StackPop(); if (!(ar is NakoVariable)) { throw new ApplicationException("『接続!』の引数が変数ではありません"); } Object a = ((NakoVariable)ar).Body; Object c; if (a is string && b is string) { c = (string)a + (string)b; } else { c = null; } // 結果をセット ((NakoVariable)ar).SetBodyAutoType(c); return (c); }
public object _close(INakoFuncCallInfo info) { object c = info.StackPop(); if(!(c is NpgsqlConnection)){ throw new NakoPluginArgmentException("connection not found"); } NpgsqlConnection con = (NpgsqlConnection)c; con.Close(); return null; /* if(!(c is ADODB.Connection)){ throw new NakoPluginArgmentException("connection not found"); } ADODB.Connection con = (ADODB.Connection)c; con.Close(); return null;*/ }
public object _close(INakoFuncCallInfo info) { object stream = info.StackPop(); if(stream is FileStream){ FileStream filestream = (FileStream)stream; filestream.Close(); filestream.Dispose(); } else if(stream is StreamReader){ StreamReader filestream = (StreamReader)stream; filestream.Close(); filestream.Dispose(); } else if(stream is StreamWriter){ StreamWriter filestream = (StreamWriter)stream; filestream.Close(); filestream.Dispose(); } return null; }
private object _remove(INakoFuncCallInfo info) { object sr = info.StackPop(); int a = NadesikoPositionToCSPosition((int)info.StackPopAsInt()); int b = (int)info.StackPopAsInt(); object s = ((NakoVariable)sr).Body; object ret; if (s is string) { string str = (string)s; if (a < str.Length) { if (a + b > str.Length) { b = str.Length - a; } ret = str.Remove(a, b); ((NakoVariable)sr).SetBodyAutoType(ret); } } return(""); }
public object _close(INakoFuncCallInfo info) { object stream = info.StackPop(); if (stream is FileStream) { FileStream filestream = (FileStream)stream; filestream.Close(); filestream.Dispose(); } else if (stream is StreamReader) { StreamReader filestream = (StreamReader)stream; filestream.Close(); filestream.Dispose(); } else if (stream is StreamWriter) { StreamWriter filestream = (StreamWriter)stream; filestream.Close(); filestream.Dispose(); } return(null); }
private object _reverse(INakoFuncCallInfo info) { object ar = info.StackPop(); if (!(ar is NakoVariable)) { throw new NakoPluginRuntimeException("『逆順』の引数が変数ではありません"); } object a = ((NakoVariable)ar).Body; if (a is NakoVarArray) { ((NakoVarArray)a).Reverse(); } else { NakoVarArray a2 = info.CreateArray(); a2.SetValuesFromString(a.ToString()); a2.Reverse(); ((NakoVariable)ar).SetBody(a2, NakoVarType.Array); } // 結果をセット return(null); }
private object _search(INakoFuncCallInfo info) { object ar = info.StackPop(); int i = (int)info.StackPopAsInt(); object key = info.StackPop(); if (!(ar is NakoVarArray)) { throw new NakoPluginRuntimeException("『検索』の引数が配列ではありません"); } NakoVarArray arr = (NakoVarArray)ar; while(arr.GetValue(i)!=null){ object var = arr.GetValue(i); if(var.ToString()==key.ToString()){ return i; } i++; } return -1; }
public object _post(INakoFuncCallInfo info) { string url = info.StackPopAsString(); object val = info.StackPop();//TODO:Array string e = info.StackPopAsString(); string query = ""; if (val is string) { query = (string)val; } else if (val is NakoVariable) { List <string> qp = new List <string>(); NakoVarArray arr = (NakoVarArray)val; foreach (NakoVariable kv in arr) { qp.Add(String.Format("{0}={1}", HttpUtility.UrlEncode(kv.key, Encoding.GetEncoding(e)), HttpUtility.UrlEncode((string)kv.Body, Encoding.GetEncoding(e)))); } query = String.Join("&", qp.ToArray()); } else { throw new Exception("variable is not NakoVariable or string"); } byte[] queryBytes = Encoding.ASCII.GetBytes(query); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; using (Stream str = req.GetRequestStream()) { str.Write(queryBytes, 0, queryBytes.Length); } WebResponse response = req.GetResponse(); string ret = ""; if (e == "Auto") { using (Stream sr = response.GetResponseStream()) { byte[] buf = new byte[32768]; int read = 0; using (MemoryStream ms = new MemoryStream()){ do { read = sr.Read(buf, 0, buf.Length); if (read > 0) { ms.Write(buf, 0, read); } } while(read > 0); if (ms.Length > 0) { ret = StrUnit.ToStringAutoEnc(ms.ToArray()); } } } } else { using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(e))) { ret = sr.ReadToEnd(); } } return(ret); }
//TODO:booleanにする? public object _next(INakoFuncCallInfo info) { object c = info.StackPop(); if(!(c is NpgsqlConnection)){ throw new NakoPluginArgmentException("connection not found"); } NpgsqlConnection con = (NpgsqlConnection)c; int key = con.GetHashCode(); bool e = _rs[key].Read(); if(e==false){ _rs[key].Close(); _cmd[key].Dispose(); return 0; } return 1; }
private object _removeright(INakoFuncCallInfo info) { object sr = info.StackPop(); int a = (int)info.StackPopAsInt(); object s = ((NakoVariable)sr).Body; object ret; if(s is string){ string _tmp = (string)s; ret = _tmp.Remove(_tmp.Length - a); }else{ ret = null; } ((NakoVariable)sr).SetBodyAutoType(ret); return null; }
public Object _sample_changeHoge(INakoFuncCallInfo info) { Object tmp = info.StackPop(); info.SetVariableValue("HOGE", tmp); return null; }
/// <summary> /// 文字列に追加する /// </summary> /// <param name="info"></param> /// <returns></returns> private object _append(INakoFuncCallInfo info) { object sr = info.StackPop(); object s = ((NakoVariable)sr).Body; string a = info.StackPopAsString(); string ret = (string)s + a; ((NakoVariable)sr).SetBodyAutoType(ret); return null; }
private object _cutRange(INakoFuncCallInfo info) { object sr = info.StackPop(); string a = info.StackPopAsString(); string b = info.StackPopAsString(); string[] predelim = {a}; string[] postdelim = {b}; if(!(sr is NakoVariable)){ throw new ApplicationException("『範囲切り取る』に変数が設定されていません"); } object s = ((NakoVariable)sr).Body; string ret; if(s is string){ string[] split_s = ((string)s).Split(predelim,2,StringSplitOptions.None); if(split_s.Length==2){ ret = split_s[1]; string[] post_split_s = ret.Split(postdelim,2,StringSplitOptions.None); if(post_split_s.Length==2){ ((NakoVariable)sr).SetBodyAutoType(split_s[0] + post_split_s[1]); return post_split_s[0]; } } } return null; }
private object _count(INakoFuncCallInfo info) { object ar = info.StackPop(); if (ar is NakoVarArray) { NakoVarArray arr = (NakoVarArray)ar; return arr.Count; }else if(ar is string){ int count = 0; System.IO.StringReader sr = new System.IO.StringReader((string)ar); while(sr.Peek()>=0){ sr.ReadLine(); count++; } sr.Close(); return count; } return 0;//TODO:Exception?? }
private object _count_array(INakoFuncCallInfo info) { object ar = info.StackPop(); if (!(ar is NakoVarArray)) { throw new NakoPluginRuntimeException("『要素数』の引数がarrayではありません"); } NakoVarArray arr = (NakoVarArray)ar; return arr.Count; }
public object _writeLine(INakoFuncCallInfo info) { string s = info.StackPopAsString(); object stream = info.StackPop(); if(stream is StreamWriter){ StreamWriter filestream = (StreamWriter)stream; filestream.WriteLine(s); } return null; }
private object __moveNext(INakoFuncCallInfo info) { object e = info.StackPop(); if(e is NakoVariable){ e = ((NakoVariable)e).Body; } Type t = e.GetType(); MethodInfo mi = t.GetMethod("MoveNext",new Type[0]); return mi.Invoke(e,null); }
public object _readLine(INakoFuncCallInfo info) { object stream = info.StackPop(); if(stream is StreamReader){ StreamReader filestream = (StreamReader)stream; return filestream.ReadLine(); } return null; }
/*ADODB.Recordset _rs = new ADODB.Recordset();*/ public object _execute(INakoFuncCallInfo info) { object c = info.StackPop(); if(!(c is NpgsqlConnection)){ throw new NakoPluginArgmentException("connection not found"); } string q = info.StackPopAsString(); NpgsqlConnection con = (NpgsqlConnection)c; NpgsqlCommand cmd = new NpgsqlCommand(q,con); if(_rs.ContainsKey(con.GetHashCode())==true){ _rs[con.GetHashCode()] = cmd.ExecuteReader(); }else{ _rs.Add(con.GetHashCode(),cmd.ExecuteReader()); } if(_cmd.ContainsKey(con.GetHashCode())==true){ _cmd[con.GetHashCode()] = cmd; }else{ _cmd.Add(con.GetHashCode(),cmd); } //cmd.Dispose(); return _rs[con.GetHashCode()].FieldCount; /*object c = info.StackPop(); if(!(c is ADODB.Connection)){ throw new NakoPluginArgmentException("connection not found"); } string q = info.StackPopAsString(); ADODB.Connection con = (ADODB.Connection)c; object affectedrows; _rs = con.Execute(q,out affectedrows,(int)ADODB.CommandTypeEnum.adCmdText); return affectedrows;*/ }
public object _no(INakoFuncCallInfo info) { CountDown o = info.StackPop() as CountDown; return(o.no); }
/* public object _say(NakoFuncCallInfo info) { object s = info.StackPop(); if (s == null) s = ""; string msg = s.ToString(); MessageBox.Show(msg); return null; } */ //private use private object __getEnumerator(INakoFuncCallInfo info) { var a = info.StackPop(); if(a is NakoVariable){ a = ((NakoVariable)a).Body; } Type t = a.GetType(); MethodInfo mi = t.GetMethod("GetEnumerator",new Type[0]); return mi.Invoke(a,null); }
/// <summary> /// 配列のキー列挙 /// </summary> /// <param name="info"></param> /// <returns></returns> private object _enumKeys(INakoFuncCallInfo info) { object ar = info.StackPop(); NakoVarArray arv = (NakoVarArray)ar; if (arv.Type != NakoVarType.Array) { throw new NakoPluginArgmentException("『ハッシュキー列挙』の引数が配列ではありません。"); } string[] keys = arv.GetKeys(); NakoVarArray res = info.CreateArray(); int i = 0; foreach (string key in keys) { res.SetValue(i++, key); } return res; }
private object _concat(INakoFuncCallInfo info) { object ar = info.StackPop(); string s = info.StackPopAsString(); if (!(ar is NakoVarArray)) { throw new NakoPluginRuntimeException("『結合』の引数が配列ではありません"); } StringBuilder sb = new StringBuilder(); NakoVarArray arr = (NakoVarArray)ar; int index = 0; while(arr.GetValue(index)!=null){ if(index > 0) sb.Append(s); object var = arr.GetValue(index); if (var != null) { sb.Append(var.ToString()); } index++; } return sb.ToString(); }
private object __current(INakoFuncCallInfo info) { object e = info.StackPop(); if(e is NakoVariable){ e = ((NakoVariable)e).Body; } Type t = e.GetType(); if(e is IEnumerator){ IEnumerator ie = (IEnumerator)e; return ie.Current; } PropertyInfo pi = t.GetProperty("Current"); return pi.GetValue(e,null); }
/// <summary> /// 切り取る /// </summary> /// <param name="info"></param> /// <returns></returns> private object _cut(INakoFuncCallInfo info) { object sr = info.StackPop(); string a = info.StackPopAsString(); string[] delim = {a}; if(!(sr is NakoVariable)){ throw new ApplicationException("『切り取る』に変数が設定されていません"); } object s = ((NakoVariable)sr).Body; object ret; if(s is string){ string[] split_s = ((string)s).Split(delim,2,StringSplitOptions.None); if(split_s.Length==2){ ret = split_s[1]; ((NakoVariable)sr).SetBodyAutoType(ret); return split_s[0]; } } return null; }
private object _insertArray(INakoFuncCallInfo info) { object obj_base = info.StackPop(); // 参照渡しなので変数への参照が得られる int i = (int)info.StackPopAsInt(); object obj_insert = info.StackPop(); if (!(obj_base is NakoVariable)) { throw new NakoPluginRuntimeException("『配列一括挿入』の元配列がvariableではありません"); } NakoVarArray array_insert = new NakoVarArray(); if (obj_insert is NakoVariable) { NakoVariable var_insert = (NakoVariable)obj_insert; if(var_insert.Body is NakoVarArray){ array_insert = (NakoVarArray)var_insert.Body; } }else if(obj_insert is string){ array_insert.SetValuesFromString((string)obj_insert); }else{ throw new NakoPluginRuntimeException("『配列一括挿入』の挿入配列がvariableではありません"); } NakoVariable var_base = (NakoVariable)obj_base; if(var_base.Body is NakoVarArray){ NakoVarArray array_base = (NakoVarArray)var_base.Body; while(array_insert.Count>0){ NakoVariable variable = array_insert.Pop(); array_base.Insert(i,variable); } } return null; }
private object _remove(INakoFuncCallInfo info) { object sr = info.StackPop(); int a = NadesikoPositionToCSPosition((int)info.StackPopAsInt()); int b = (int)info.StackPopAsInt(); object s = ((NakoVariable)sr).Body; object ret; if(s is string){ ret = ((string)s).Remove(a,b); }else{ ret = null; } ((NakoVariable)sr).SetBodyAutoType(ret); return null; }
private object _pop(INakoFuncCallInfo info) { object ary = info.StackPop(); // 参照渡しなので変数への参照が得られる if (!(ary is NakoVariable)) { throw new NakoPluginRuntimeException("『ポップ』の引数がvariableではありません"); } NakoVariable ary_link = (NakoVariable)ary; if (ary_link.Body is NakoVarArray) { NakoVarArray arr = (NakoVarArray)ary_link.Body; return arr.Pop(); } // 結果をセット return null; }
private object __dispose(INakoFuncCallInfo info) { object e = info.StackPop(); if(e is NakoVariable){ e = ((NakoVariable)e).Body; } if(e is IDisposable){ ((IDisposable)e).Dispose(); } return null; }
private object _removeAt(INakoFuncCallInfo info) { object a = info.StackPop(); long i = info.StackPopAsInt(); if (!(a is NakoVariable)) { throw new NakoPluginRuntimeException("『削除』の引数が変数ではありません"); } NakoVariable av = (NakoVariable)a; NakoVarArray a_body = null; // 配列でなければ配列に強制変換する if (!(av.Body is NakoVarArray)) { a_body = info.CreateArray(); a_body.SetValuesFromString(av.Body.ToString()); av.SetBody(a_body, NakoVarType.Array); } else { a_body = (NakoVarArray)av.Body; } // 要素を削除する a_body.RemoveAt((int)i); // 結果をセット return null; }
/// <summary> /// Copy the specified info. /// </summary> /// <param name="info">Info.</param> private object _copy(INakoFuncCallInfo info) { NakoVarArray ar = info.StackPop() as NakoVarArray; return(ar.Clone()); }
private object _reverse(INakoFuncCallInfo info) { object ar = info.StackPop(); if (!(ar is NakoVariable)) { throw new NakoPluginRuntimeException("『逆順』の引数が変数ではありません"); } object a = ((NakoVariable)ar).Body; if (a is NakoVarArray) { ((NakoVarArray)a).Reverse(); } else { NakoVarArray a2 = info.CreateArray(); a2.SetValuesFromString(a.ToString()); a2.Reverse(); ((NakoVariable)ar).SetBody(a2, NakoVarType.Array); } // 結果をセット return null; }
/// <summary> /// 配列キー存在? /// </summary> /// <param name="array"></param> /// <param name="key"></param> /// <returns></returns> private object _hasKey(INakoFuncCallInfo info) { object ar = info.StackPop(); NakoVarArray arv = (NakoVarArray)ar; string searchKey = info.StackPopAsString (); if (arv.Type != NakoVarType.Array) { throw new NakoPluginArgmentException("『存在』の引数が配列ではありません。"); } string[] keys = arv.GetKeys(); NakoVarArray res = info.CreateArray(); foreach (string key in keys) { if (key == searchKey) return 1; } return 0; }
public object _getField(INakoFuncCallInfo info) { object c = info.StackPop(); if(!(c is NpgsqlConnection)){ throw new NakoPluginArgmentException("connection not found"); } string s = info.StackPopAsString(); NpgsqlConnection con = (NpgsqlConnection)c; NpgsqlDataReader rs = _rs[con.GetHashCode()]; return rs[s].ToString(); /* object c = info.StackPop(); string s = info.StackPopAsString(); return _rs.Fields[s].Value;*/ }