+static uint32_t _lmo_hash_string(lua_State *L, int n) {
+ size_t len;
+ const char *str = luaL_checklstring(L, n, &len);
+ char res[4096];
+ char *ptr, prev;
+
+ if (!str || len >= sizeof(res))
+ return 0;
+
+ while (*str && isspace(*str))
+ str++;
+
+ for (prev = 0, ptr = res; *str; prev = *str, str++)
+ {
+ if (isspace(*str))
+ {
+ if (isspace(prev))
+ continue;
+
+ *ptr++ = ' ';
+ }
+ else
+ {
+ *ptr++ = *str;
+ }
+ }
+
+ while ((ptr > res) && isspace(*ptr))
+ ptr--;
+
+ return sfh_hash(res, ptr - res);
+}
+