summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--io/listBrackets.io12
-rw-r--r--io/xmlGen.io75
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")
+ )
+)