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