https://www.mediawiki.org/wiki/Special:Code/MediaWiki/115002

Revision: 115002
Author:   vvv
Date:     2012-04-22 01:23:14 +0000 (Sun, 22 Apr 2012)
Log Message:
-----------
ustring API niceties I found useful while writing the Lua version of it:
* Make pos() return false if substring is not found. That makes sense since even
  zero is true in Lua.
* Implement tostring() interface to convert ustrings to stirngs.

Modified Paths:
--------------
    trunk/php/luasandbox/ustring.c

Modified: trunk/php/luasandbox/ustring.c
===================================================================
--- trunk/php/luasandbox/ustring.c      2012-04-21 19:06:28 UTC (rev 115001)
+++ trunk/php/luasandbox/ustring.c      2012-04-22 01:23:14 UTC (rev 115002)
@@ -31,6 +31,7 @@
 int luasandbox_ustr_concat(lua_State * L);
 int luasandbox_ustr_eq(lua_State * L);
 int luasandbox_ustr_index(lua_State * L);
+int luasandbox_ustr_tostring(lua_State * L);
 
 int luasandbox_ustr_ucfirst(lua_State * L);
 int luasandbox_ustr_uc(lua_State * L);
@@ -82,6 +83,10 @@
        lua_pushcfunction( L, luasandbox_ustr_index );
        lua_rawset( L, -3 );
 
+       lua_pushstring( L, "__tostring" );
+       lua_pushcfunction( L, luasandbox_ustr_tostring );
+       lua_rawset( L, -3 );
+
        lua_pushcfunction( L, luasandbox_ustr_create );
        lua_setglobal( L, "u" );
 
@@ -355,7 +360,7 @@
        luasandbox_ustr_header *str;
        uint8_t *raw;
 
-       str = luaL_checkudata( L, 1, "luasandbox_ustr" );
+       str = luasandbox_checkustring( L, 1 );
        raw = LUASANDBOX_USTR_RAW(str);
 
        if( lua_type( L, 2 ) == LUA_TNUMBER ) {
@@ -390,6 +395,24 @@
 }
 /* }}} */
 
+/** {{{ luasandbox_ustr_tostring
+ * 
+ * Lua function providing the tostring() interface.
+ * Returns the UTF-8 version of the ustring.
+ */
+int luasandbox_ustr_tostring(lua_State * L)
+{
+       luasandbox_ustr_header *str;
+       uint8_t *raw;
+
+       str = luasandbox_checkustring( L, 1 );
+       raw = LUASANDBOX_USTR_RAW(str);
+
+       lua_pushlstring( L, raw, str->raw_len );
+       return 1;
+}
+/* }}} */
+
 /******************   Library   ******************/
 
 /** {{{ luasandbox_ustr_ucfirst
@@ -828,7 +851,7 @@
                        lua_pushinteger( L, result.cp_index + 1 );
                        return 1;
                case UTF8_SEARCH_STATUS_NOTFOUND:
-                       lua_pushinteger( L, -1 );
+                       lua_pushboolean( L, 0 );
                        return 1;
        }
 }


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to