From 1b9287fcfb345aab4b31d7d6f4c0d330bd5e13f3 Mon Sep 17 00:00:00 2001 From: j-james Date: Thu, 23 Jun 2022 23:24:18 -0700 Subject: Basic HTML parsing and terminal rendering --- src/gui/terminal.nim | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/gui/terminal.nim (limited to 'src/gui') diff --git a/src/gui/terminal.nim b/src/gui/terminal.nim new file mode 100644 index 0000000..e893081 --- /dev/null +++ b/src/gui/terminal.nim @@ -0,0 +1,35 @@ +import std/[strutils, tables], ../formats/html + +proc print(node: Node, indent=0, raw=false) = + if node.kind == Element: + if not raw: + stdout.write(" ".repeat(indent)) + stdout.write("<" & node.tag) + for attribute in node.attributes.pairs: + stdout.write(" " & attribute[0] & "=" & attribute[1]) + stdout.write(">") + stdout.write('\n') + for i in node.nested: + i.print(indent+2) + if not raw: + stdout.write(" ".repeat(indent)) + stdout.write("") + stdout.write('\n') + else: + stdout.write(" ".repeat(indent)) + stdout.write(node.text) + +proc render*(html: Html) = + for node in html: + node.print() + +proc renderSource*(html: Html) = + for node in html: + node.print(0, true) + +when isMainModule: + import ../protocols/http, ../uri + let url = "https://example.org:443/index.html" + let request = httpRequest(parseUrl(url)) + let parsed = parseHTML(request.body) + renderSource(parsed) -- cgit v1.2.3-70-g09d2