diff options
Diffstat (limited to 'ebus-racket/3rdparty/bzlib/parseq/input.ss')
-rw-r--r-- | ebus-racket/3rdparty/bzlib/parseq/input.ss | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/ebus-racket/3rdparty/bzlib/parseq/input.ss b/ebus-racket/3rdparty/bzlib/parseq/input.ss new file mode 100644 index 0000000..406b6f2 --- /dev/null +++ b/ebus-racket/3rdparty/bzlib/parseq/input.ss @@ -0,0 +1,83 @@ +#lang scheme/base +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; PARSEQ.PLT +;; A Parser Combinator library. +;; +;; Bonzai Lab, LLC. All rights reserved. +;; +;; Licensed under LGPL. +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; input.ss - holds the abstraction of the input object... +;; yc 12/31/2009 - first version +;; yc 1/8/2009 - fix build-input & Input/c +(require scheme/contract) +;; state +;; the struct that abstracts the input +;; currently this holds an input-port + the position on the port +;; in the future this can be used to hold string, list, vector, etc. +(define-struct input (source pos) #:prefab) + +;; input +;; an utility for converting source into input state. +(define (build-input v (pos 0)) + (define (helper v) + (cond ((input-port? v) v) + ((string? v) (open-input-string v)) + ((bytes? v) (open-input-bytes v)))) + (if (input? v) + (new-input v pos) + (make-input (helper v) pos))) + +;; new-input +;; make a new input based on the old input and a new position... +(define (new-input input incr) + (make-input (input-source input) + (+ incr (input-pos input)))) + +;; peek-bytes* +;; return a funtion that will make a particular amount of reading based on +;; the requested size... +(define (peek-bytes* size) + (lambda (in) + (peek-bytes size (input-pos in) (input-source in)))) + +;; peek-string* +;; return a function that will read a particular size of string... +;; this can fail since it is expected to be using utf-8 as the input size... +(define (peek-string* size) + (lambda (in) + (peek-string size (input-pos in) (input-source in)))) + +;; peek-byte* +;; peek a single byte +(define (peek-byte* in) + (peek-byte (input-source in) (input-pos in))) + +;; peek-char* +;; peek a single char +(define (peek-char* in) + (peek-char (input-source in) (input-pos in))) + +;; read-bytes* +;; read out the bytes based on the size of the input... +(define (read-bytes* in) + (read-bytes (input-pos in) (input-source in))) + +(define Input/c (or/c input? bytes? string? input-port?)) + +(define Parser/c (-> Input/c (values any/c Input/c))) + +(provide input + input? + input-source + input-pos + (rename-out (build-input make-input)) + new-input + peek-bytes* + peek-string* + peek-byte* + peek-char* + read-bytes* + Input/c + Parser/c + )
\ No newline at end of file |