int Xml_encode(lua_State *L) { if(lua_gettop(L)!=1) return 0; luaL_checkstring(L,-1); size_t i; for(i=0; i<sv_code_size; i+=2) { luaL_gsub(L, lua_tostring(L,-1), sv_code[i], sv_code[i+1]); lua_remove(L,-2); } char buf[8]; const char* s=lua_tostring(L,1); size_t start, pos; luaL_Buffer b; luaL_buffinit(L, &b); for(start=pos=0; s[pos]!=0; ++pos) if(s[pos]<0) { if(pos>start) luaL_addlstring(&b,s+start, pos-start); luaL_addstring(&b,char2code((unsigned char)(s[pos]),buf)); start=pos+1; } if(pos>start) luaL_addlstring(&b,s+start, pos-start); luaL_pushresult(&b); lua_remove(L,-2); return 1; }
int Xml_encode(HSQUIRRELVM v) { SQ_FUNC_VARS(v); SQ_GET_STRING(v, 2, s); size_t i; for(i=0; i<sv_code_size; i+=2) { sq_str_replace(v, s, sv_code[i], sv_code[i+1]); sq_remove(v,-2); } SQChar buf[8]; SQ_GET_STRING(v, 2, s); size_t start, pos; SQBlob b(0, BLOB_BUFSIZE); for(start=pos=0; s[pos]!=0; ++pos) if(s[pos]<0) { if(pos>start) b.Write(s+start, pos-start); b.WriteZstr(char2code(uchar(s[pos]),buf)); start=pos+1; } if(pos>start) b.Write(s+start, pos-start); sq_pushstring(v, (const SQChar*)b.GetBuf(), b.Len()); return 1; }