Revert "Remove Lua 5.1 support"
[lsnes.git] / src / lua / string.cpp
blob2acc3ed632d8a7937d0aa95daab1f98021fca579
1 #include "lua/internal.hpp"
2 #include "library/string.hpp"
4 namespace
6 int l_regex(lua::state& L, lua::parameters& P)
8 std::string regexp;
9 std::string against;
11 P(regexp, against);
13 regex_results r = regex(regexp, against);
14 if(!r) {
15 L.pushboolean(false);
16 return 1;
18 if(r.size() == 1) {
19 L.pushboolean(true);
20 return 1;
22 for(size_t i = 1; i < r.size(); i++)
23 L.pushlstring(r[i]);
24 return r.size() - 1;
27 int l_hex(lua::state& L, lua::parameters& P)
29 uint64_t v, p;
31 P(v, P.optional(p, -1));
33 if(p < 0)
34 L.pushlstring((stringfmt() << std::hex << v).str());
35 else
36 L.pushlstring((stringfmt() << std::hex << std::setw(p) << std::setfill('0') << v).str());
37 return 1;
40 template<bool right>
41 int l_pad(lua::state& L, lua::parameters& P)
43 std::string x;
44 uint64_t l;
46 P(x, l);
48 if(x.length() >= l)
49 L.pushlstring(x);
50 else if(right)
51 L.pushlstring(x + std::string(l - x.length(), ' '));
52 else
53 L.pushlstring(std::string(l - x.length(), ' ') + x);
54 return 1;
57 lua::functions LUA_string_fns(lua_func_bit, "", {
58 {"_lsnes_string_regex", l_regex},
59 {"_lsnes_string_hex", l_hex},
60 {"_lsnes_string_lpad", l_pad<false>},
61 {"_lsnes_string_rpad", l_pad<true>},
62 });