summaryrefslogtreecommitdiff
path: root/chickadee
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2018-08-20 20:22:44 -0400
committerDavid Thompson <dthompson2@worcester.edu>2018-08-23 08:01:11 -0400
commiteceae08c4f6985c3cc30191ab33b22302578b81e (patch)
treeead018aabef22bbd0097df991f6a900bc7b93883 /chickadee
parent89ed33ac799b9b55b4694c46f8e19a24d343e99b (diff)
math: vector: Add read syntax.
* chickadee/math/vector.scm (read-vec): New procedure. Extend reader. * examples/lines.scm: Use new vector read syntax. * examples/nine-patch.scm: Ditto. * examples/sprite.scm: Ditto. * examples/text.scm: Ditto. * examples/tiled.scm: Ditto.
Diffstat (limited to 'chickadee')
-rw-r--r--chickadee/math/vector.scm26
1 files changed, 26 insertions, 0 deletions
diff --git a/chickadee/math/vector.scm b/chickadee/math/vector.scm
index 78aa564..2ae9187 100644
--- a/chickadee/math/vector.scm
+++ b/chickadee/math/vector.scm
@@ -311,3 +311,29 @@ polar coordinate (R, THETA)."
(set-vec3-x! v (- (vec3-x v) (vec3-x x)))
(set-vec3-y! v (- (vec3-y v) (vec3-y x)))
(set-vec3-z! v (- (vec3-z v) (vec3-z x))))))
+
+;; Reader macro for vectors.
+(define (read-vec chr port)
+ (define (consume-whitespace port)
+ (when (char-whitespace? (peek-char port))
+ (read-char port)
+ (consume-whitespace port)))
+ (if (eq? (peek-char port) #\()
+ (read-char port)
+ (error "expected opening #\\("))
+ (consume-whitespace port)
+ (let ((x (read port))
+ (y (read port)))
+ (if (eq? (peek-char port) #\))
+ (begin
+ (read-char port)
+ `(vec2 ,x ,y))
+ (let ((z (read port)))
+ (consume-whitespace port)
+ (if (eq? (peek-char port) #\))
+ (begin
+ (read-char port)
+ `(vec3 ,x ,y ,z))
+ (error "expected terminating #\\)"))))))
+
+(read-hash-extend #\v read-vec)