diff options
-rw-r--r-- | io/listBrackets.io | 12 | ||||
-rw-r--r-- | io/xmlGen.io | 75 |
2 files changed, 87 insertions, 0 deletions
diff --git a/io/listBrackets.io b/io/listBrackets.io new file mode 100644 index 0000000..cd099de --- /dev/null +++ b/io/listBrackets.io @@ -0,0 +1,12 @@ +List squareBrackets := method(idx, + call target at(idx) +) + +list("a", "b", "c", "d")[-3] println + +List curlyBrackets := method(n, + self map (*n) +) + +a := list(1,2,3,4,5) +a{a[-1]} println diff --git a/io/xmlGen.io b/io/xmlGen.io new file mode 100644 index 0000000..1fa4b50 --- /dev/null +++ b/io/xmlGen.io @@ -0,0 +1,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") + ) +) |