瀏覽代碼

Add string function find_delimiter, to search for delimited text.

mingodad 12 年之前
父節點
當前提交
b1d14633b7
共有 1 個文件被更改,包括 21 次插入1 次删除
  1. 21 1
      SquiLu/squirrel/sqbaselib.cpp

+ 21 - 1
SquiLu/squirrel/sqbaselib.cpp

@@ -1485,6 +1485,25 @@ static SQRESULT string_find_close_quote(HSQUIRRELVM v) {
     return 1;
     return 1;
 }
 }
 
 
+static SQRESULT string_find_delimiter(HSQUIRRELVM v) {
+    SQ_FUNC_VARS(v);
+    SQ_GET_STRING(v, 1, src);
+    SQ_GET_INTEGER(v, 2, delimiter);
+    SQ_GET_INTEGER(v, 3, escape_char);
+    SQ_GET_INTEGER(v, 4, init);
+    if(init >= src_size) return sq_throwerror(v, _SC("invalid start position"));
+
+    for(; init < src_size; ++init) {
+        if(src[init] == delimiter){
+             if(src[init-1] == escape_char) ++init; //skip quoted quote
+             else break;
+        }
+    }
+    if(src[init] != delimiter) init = -1;
+    sq_pushinteger(v, init);
+    return 1;
+}
+
 static SQRESULT string_reverse (HSQUIRRELVM v) {
 static SQRESULT string_reverse (HSQUIRRELVM v) {
   int i;
   int i;
   SQ_FUNC_VARS_NO_TOP(v);
   SQ_FUNC_VARS_NO_TOP(v);
@@ -1722,7 +1741,8 @@ SQRegFunction SQSharedState::_string_default_delegate_funcz[]={
 	{_SC("replace"),string_replace,3, _SC("sss")},
 	{_SC("replace"),string_replace,3, _SC("sss")},
 	{_SC("find"),string_find,-2, _SC("s s n ")},
 	{_SC("find"),string_find,-2, _SC("s s n ")},
 	{_SC("find_lua"),string_find_lua,-2, _SC("ss a|t|c nb")},
 	{_SC("find_lua"),string_find_lua,-2, _SC("ss a|t|c nb")},
-	{_SC("find_close_quote"),string_find_close_quote,-1, _SC("sn")},
+	{_SC("find_close_quote"),string_find_close_quote,-1, _SC("sn")},
+	{_SC("find_delimiter"),string_find_delimiter,4, _SC("siin")},
 	{_SC("gsub"),string_gsub,-3, _SC("s s s|a|t|c n")},
 	{_SC("gsub"),string_gsub,-3, _SC("s s s|a|t|c n")},
 	{_SC("gmatch"),string_gmatch, 3, _SC("s s c")},
 	{_SC("gmatch"),string_gmatch, 3, _SC("s s c")},
 	{_SC("match"), string_gmatch, 2, _SC("s s")},
 	{_SC("match"), string_gmatch, 2, _SC("s s")},