GraphWeb/main.cpp
2025-01-16 13:55:12 +01:00

59 lines
1.3 KiB
C++

#include <stdio.h>
#include <stdlib.h>
#include <emscripten/val.h>
extern "C" {
#include "lex.h"
#include "parser.h"
#include "canvas_graph.h"
}
static void draw_graph_impl(struct error_buffer *eb, const char *expr, const struct graph_range *range) {
struct parser parser;
struct expr_node *node;
error_buffer_init(eb);
/* zpracování výrazu */
node = parser_parse(&parser, expr, "x");
if (!node) {
/* vypsání chyby */
error_set(eb, parser_get_error(&parser));
error_printf(eb, "%s", parser_get_error_text(&parser));
return;
}
/* vygenerování grafu */
canvas_generate_graph(node, range, expr);
/* uvolnění paměti */
node_free(node);
return;
}
int main() {
}
using namespace emscripten;
extern "C" void draw_graph(const char *expr, double xmin, double xmax, double ymin, double ymax) {
const val document = val::global("document");
val p = document.call<val>("getElementById", val("output"));
struct error_buffer eb;
struct graph_range range = {xmin, xmax, ymin, ymax};
draw_graph_impl(&eb, expr, &range);
if (error_get(&eb) != ERR_NO_ERR) {
p.set("innerText", error_get_text(&eb));
}
else {
p.set("innerText", "");
}
}