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);