A binding to libqalculate for lua
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.2 KiB

2 years ago
  1. #include <lua.hpp>
  2. #include <libqalculate/qalculate.h>
  3. #include <string>
  4. const char* qalculate(const char* input, bool exact_mode) {
  5. Calculator* c = new Calculator();
  6. c->loadExchangeRates();
  7. c->loadGlobalDefinitions();
  8. c->loadLocalDefinitions();
  9. std::string Input = input;
  10. std::string Output;
  11. if (exact_mode) {
  12. default_user_evaluation_options.approximation = APPROXIMATION_EXACT;
  13. } else {
  14. default_user_evaluation_options.approximation = APPROXIMATION_APPROXIMATE;
  15. }
  16. Output = c->calculateAndPrint(Input,2000,default_user_evaluation_options);
  17. delete c;
  18. char * output = new char [Output.length()+1];
  19. Output.copy(output,Output.length());
  20. output[Output.length()] = "\0"[0];
  21. return output;
  22. }
  23. extern "C"
  24. int l_qalc(lua_State* L) {
  25. const char * input = luaL_checkstring(L, 1);
  26. bool exact_mode = lua_toboolean(L, 2);
  27. const char * output = qalculate(input, exact_mode);
  28. lua_pushstring(L, output);
  29. return 1;
  30. }
  31. extern "C"
  32. int luaopen_libqalculator(lua_State* L) {
  33. static const struct luaL_Reg library [] =
  34. {
  35. {"qalc", l_qalc},
  36. {NULL, NULL}
  37. };
  38. luaL_register(L, "qalc", library);
  39. return 1;
  40. }