From 3ee2d6915b2499780138258aeea82e18245ad7cf Mon Sep 17 00:00:00 2001 From: Lassi Kortela Date: Thu, 28 Mar 2019 12:28:51 +0200 Subject: [PATCH] Split read-char? and kin into their own library --- read-char-if.scm | 23 +++++++++++++++++++++++ read-char-if.sld | 6 ++++++ tex-parser.scm | 24 ------------------------ tex-parser.sld | 5 ++++- 4 files changed, 33 insertions(+), 25 deletions(-) create mode 100644 read-char-if.scm create mode 100644 read-char-if.sld diff --git a/read-char-if.scm b/read-char-if.scm new file mode 100644 index 0000000..2fe812e --- /dev/null +++ b/read-char-if.scm @@ -0,0 +1,23 @@ +(define (match-char? k char) + (cond ((procedure? k) (not (not (k char)))) + ((char? k) (equal? k char)) + (else #f))) + +(define (read-char? k) + ;;(fprintf (current-error-port) "read-char? ~a~%" k) + (and (match-char? k (peek-char)) + (begin (let ((char (read-char))) + ;;(display char (current-error-port)) + ;;(newline (current-error-port)) + char)))) + +(define (read-char* k) + (let* ((first-char (read-char? k)) + (chars (let ((out (open-output-string))) + (let loop ((char first-char)) + (cond ((or (equal? #f char) (eof-object? char)) + (get-output-string out)) + (else + (write-char char out) + (loop (read-char? k)))))))) + (if (= 0 (string-length chars)) #f chars))) diff --git a/read-char-if.sld b/read-char-if.sld new file mode 100644 index 0000000..c5c8c27 --- /dev/null +++ b/read-char-if.sld @@ -0,0 +1,6 @@ +(define-library (read-char-if) + (export read-char? read-char*) + (import (scheme base) + (scheme char) + (scheme file)) + (include "read-char-if.scm")) diff --git a/tex-parser.scm b/tex-parser.scm index a10fd73..b84e050 100644 --- a/tex-parser.scm +++ b/tex-parser.scm @@ -1,27 +1,3 @@ -(define (match-char? k char) - (cond ((procedure? k) (not (not (k char)))) - ((char? k) (equal? k char)) - (else #f))) - -(define (read-char? k) - ;;(fprintf (current-error-port) "read-char? ~a~%" k) - (and (match-char? k (peek-char)) - (begin (let ((char (read-char))) - ;;(display char (current-error-port)) - ;;(newline (current-error-port)) - char)))) - -(define (read-char* k) - (let* ((first-char (read-char? k)) - (chars (let ((out (open-output-string))) - (let loop ((char first-char)) - (cond ((or (equal? #f char) (eof-object? char)) - (get-output-string out)) - (else - (write-char char out) - (loop (read-char? k)))))))) - (if (= 0 (string-length chars)) #f chars))) - (define (tex-command-char? ch) (or (char-alphabetic? ch) (char-numeric? ch))) diff --git a/tex-parser.sld b/tex-parser.sld index bfb7ae1..06ad584 100644 --- a/tex-parser.sld +++ b/tex-parser.sld @@ -1,4 +1,7 @@ (define-library (tex-parser) (export parse-tex-from-port) - (import (scheme base) (scheme char) (scheme file)) + (import (scheme base) + (scheme char) + (scheme file) + (read-char-if)) (include "tex-parser.scm"))