diff options
author | David Thompson <dthompson2@worcester.edu> | 2018-08-20 20:22:44 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2018-08-23 08:01:11 -0400 |
commit | eceae08c4f6985c3cc30191ab33b22302578b81e (patch) | |
tree | ead018aabef22bbd0097df991f6a900bc7b93883 /chickadee | |
parent | 89ed33ac799b9b55b4694c46f8e19a24d343e99b (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.scm | 26 |
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) |