osci-render/Source/lua/LuaParser.h

42 wiersze
1.1 KiB
C
Czysty Zwykły widok Historia

#pragma once
#include <JuceHeader.h>
#include <regex>
#include "../shape/Shape.h"
2023-12-20 17:13:38 +00:00
class ErrorListener {
public:
virtual void onError(int lineNumber, juce::String error) = 0;
};
struct lua_State;
class LuaParser {
public:
2023-12-20 17:13:38 +00:00
LuaParser(juce::String script, std::function<void(int, juce::String)> errorCallback, juce::String fallbackScript = "return { 0.0, 0.0 }");
~LuaParser();
2023-07-21 16:42:29 +00:00
std::vector<float> run();
void setVariable(juce::String variableName, double value);
bool isFunctionValid();
juce::String getScript();
2023-12-20 17:13:38 +00:00
void addErrorListener(ErrorListener* listener);
void removeErrorListener(ErrorListener* listener);
2023-07-04 13:58:36 +00:00
private:
void reset(juce::String script);
2023-12-20 17:13:38 +00:00
void reportError(const char* error);
void parse();
2023-07-04 13:58:36 +00:00
static int panic(lua_State* L);
int functionRef = -1;
2023-12-20 17:13:38 +00:00
bool usingFallbackScript = false;
long step = 1;
lua_State* L = nullptr;
juce::String script;
juce::String fallbackScript;
2023-07-04 13:58:36 +00:00
std::atomic<bool> updateVariables = false;
juce::SpinLock variableLock;
2023-07-04 13:58:36 +00:00
std::vector<juce::String> variableNames;
std::vector<double> variables;
2023-12-20 17:13:38 +00:00
std::function<void(int, juce::String)> errorCallback;
};