summaryrefslogtreecommitdiff
path: root/io/xmlGen.io
blob: 1fa4b50ce2f9cd35ff707018fd3dc2c64e6d1605 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
OperatorTable addAssignOperator(":", "atPutNumber")

curlyBrackets := method(
	m := Map clone
	call message arguments foreach(arg, m doMessage(arg))
	m
)

Map atPutNumber := method(
	self atPut(
		call evalArgAt(0) asMutable removePrefix("\"") removeSuffix("\""),
		call evalArgAt(1)
	)
)

Map asString := method(
	pairs := Sequence asMutable
	foreach(k,v,
		pairs appendSeq(" #{k}=\"#{v}\"" interpolate)
	)
	pairs
)

xmlGen := Object clone do(
	tabs := 0

	ind_print := method(s,
		"\t" repeated(tabs) print
		s println
		self
	)

	etiq := method(str,
		ind_print("<" .. str .. ">")
		self
	)

	indent_up := method(tabs = tabs+1)
	indent_down := method(tabs = tabs-1)

	forward = method(
		msgName := call message name
		args := call message arguments

		if (args isEmpty not and args first name == "curlyBrackets") then (
			m := doString(args first asString)
			etiq(msgName .. m)
			args removeFirst
		) else (
			etiq(msgName)
		)

		indent_up
		args foreach(arg,
			m := doMessage(arg)
			if (m type == "Sequence",
				ind_print(arg)
			)
		)
		indent_down

		etiq("/" .. msgName)
	)
)

xmlGen html(
	head(
		title("Mi pagina"),
		meta("robots")
	),
	body(
		p("Hola"),
		a({"href":"google.es", "alt":"Google!"}, "URL")
	)
)