summary refs log tree commit diff stats
path: root/lib/phpcl.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/phpcl.nim')
-rw-r--r--lib/phpcl.nim50
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/phpcl.nim b/lib/phpcl.nim
new file mode 100644
index 000000000..6d7aa0ea6
--- /dev/null
+++ b/lib/phpcl.nim
@@ -0,0 +1,50 @@
+#
+#
+#            Nim's Runtime Library
+#        (c) Copyright 2015 Andreas Rumpf
+#
+#    See the file "copying.txt", included in this
+#    distribution, for details about the copyright.
+#
+
+## PHP compatibility layer.
+
+type
+  PhpArray*[Key, Val] = ref object
+
+  PhpObj* = ref object ## can be a string, an int etc.
+
+proc explode*(sep, x: string): seq[string] {.importc: "explode".}
+template split*(x, sep: string): seq[string] = explode(sep, x)
+
+proc `$`*(x: PhpObj): string {.importcpp: "(#)".}
+proc `++`*(x: PhpObj) {.importcpp: "++(#)".}
+
+proc `==`*(x, y: PhpObj): string {.importcpp: "((#) == (#))".}
+proc `<=`*(x, y: PhpObj): string {.importcpp: "((#) <= (#))".}
+proc `<`*(x, y: PhpObj): string {.importcpp: "((#) < (#))".}
+
+proc toUpper*(x: string): string {.importc: "strtoupper".}
+proc toLower*(x: string): string {.importc: "strtolower".}
+
+proc strtr*(s: string, replacePairs: PhpArray[string, string]): string {.importc.}
+proc strtr*(s, fromm, to: string): string {.importc.}
+
+proc toArray*[K,V](pairs: openarray[(K,V)]): PhpArray[K,V] {.magic:
+  "Repr".}
+template strtr*(s: string, replacePairs: openarray[(string, string)]): string =
+  strtr(toArray(replacePairs))
+
+iterator pairs*[K,V](d: PhpArray[K,V]): (K,V) =
+  var k: K
+  var v: V
+  {.emit: "foreach (`d` as `k`=>`v`) {".}
+  yield (k, v)
+  {.emit: "}".}
+
+proc `[]`*[K,V](d: PhpArray[K,V]; k: K): V {.importcpp: "#[#]".}
+proc `[]=`*[K,V](d: PhpArray[K,V]; k: K; v: V) {.importcpp: "#[#] = #".}
+
+proc ksort*[K,V](d: PhpArray[K,V]) {.importc.}
+proc krsort*[K,V](d: PhpArray[K,V]) {.importc.}
+proc keys*[K,V](d: PhpArray[K,V]): seq[K] {.importc.}