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.children:
i.print(indent+2)
if not raw:
stdout.write(" ".repeat(indent))
stdout.write("" & node.tag & ">")
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, ../formats/uri
let url = "https://example.org:443/index.html"
let request = httpRequest(parseUrl(url))
let parsed = parseHTML(request.body)
renderSource(parsed)