59 lines
1.3 KiB
C++
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", "");
|
|
}
|
|
|
|
|
|
}
|