diff --git a/misc/diagram_server.py b/misc/diagram_server.py
new file mode 100644
index 0000000..9a27f80
--- /dev/null
+++ b/misc/diagram_server.py
@@ -0,0 +1,130 @@
+from http.server import BaseHTTPRequestHandler, HTTPServer
+from urllib.parse import parse_qs
+import subprocess as sp
+import os
+
+def page(src="", content=""):
+ return f"""
+
+
+
+ Noja Diagram Server
+
+
+
+
+
+ {content}
+
+
+
+"""
+
+class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
+ def do_GET(self):
+ self.send_response(200)
+ self.send_header('Content-type', 'text/html')
+ self.end_headers()
+ self.wfile.write(page().encode('utf-8'))
+
+ def do_POST(self):
+ content_length = int(self.headers['Content-Length'])
+ post_data = self.rfile.read(content_length).decode('utf-8')
+ parsed_data = parse_qs(post_data)
+
+ self.send_response(200)
+ self.send_header('Content-type', 'text/html')
+ self.end_headers()
+
+ if 'message' not in parsed_data:
+ self.wfile.write(page().encode('utf-8'))
+ return
+
+ message = parsed_data['message'][0]
+
+ src = "/tmp/src.noja"
+ tmp = "/tmp/tmp.dot"
+ dst = "/tmp/dst.svg"
+
+ open(src, "wb").write(bytes(message, 'ascii'))
+
+ cmd = f"noja --diagram-ast -o {tmp} {src}"
+ output = sp.Popen(cmd, shell=True, stderr=sp.PIPE).stderr.read().decode('utf-8')
+
+ if not os.path.isfile(tmp):
+ self.wfile.write(page(message, output).encode('utf-8'))
+ return
+
+ cmd = f"dot -Tsvg -o {dst} {tmp}"
+ output = sp.Popen(cmd, shell=True, stdout=sp.PIPE).stdout.read().decode('utf-8')
+
+ if not os.path.isfile(dst):
+ self.wfile.write(page(message, output).encode('utf-8'))
+ return
+
+ svg = open(dst, "rb").read().decode('utf-8')
+
+ os.remove(src)
+ os.remove(tmp)
+ os.remove(dst)
+
+ self.wfile.write(page(message, svg).encode('utf-8'))
+
+def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler, port=8000):
+ server_address = ('', port)
+ httpd = server_class(server_address, handler_class)
+ print(f"Server avviato su http://localhost:{port}")
+ httpd.serve_forever()
+
+if __name__ == '__main__':
+ run()
\ No newline at end of file
diff --git a/src/cli/main.c b/src/cli/main.c
index 373f3c0..2c60fee 100644
--- a/src/cli/main.c
+++ b/src/cli/main.c
@@ -157,11 +157,13 @@ int main(int argc, char **argv)
Error error;
Error_Init(&error);
+ int error_offset;
+
char *result;
if (no_file)
- result = diagramStringAST(input, &error, NULL);
+ result = diagramStringAST(input, &error, &error_offset);
else
- result = diagramFileAST(input, &error, NULL);
+ result = diagramFileAST(input, &error, &error_offset);
if (!result) {
Error_Print(&error, ErrorType_UNSPECIFIED, stderr);