-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser-utils.sls
43 lines (34 loc) · 1.35 KB
/
parser-utils.sls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!r6rs
;;; parser-utils.sls --- Parscheme utilities
;; Copyright (C) 2009, 2010, 2015 Andreas Rottmann <a.rottmann@gmx.at>
;; Author: Andreas Rottmann <a.rottmann@gmx.at>
;; This program is free software, you can redistribute it and/or
;; modify it under the terms of the new-style BSD license.
;; You should have received a copy of the BSD license along with this
;; program. If not, see <http://www.debian.org/misc/bsd.license>.
;;; Commentary:
;;; Code:
(library (ocelotl parser-utils)
(export parse-input-bytes-as-latin1)
(import (rnrs)
(srfi :45 lazy)
(wak riastreams)
(wak parscheme parser-combinators))
(define (parse-input-bytes-as-latin1 parser input-port context win lose)
(parse-stream parser
(let recur ()
(lazy (let ((byte (get-u8 input-port)))
(if (eof-object? byte)
stream-nil
(stream-cons (integer->char byte) (recur))))))
(cons 1 1)
(lambda (position char)
(let ((line (car position))
(column (cdr position)))
(if (char=? char #\newline)
(cons (+ line 1) 1)
(cons line (+ column 1)))))
context
win
lose))
)