From 4093313e43fe4319bf0f0e4f20b269fbad32abb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Wed, 22 Mar 2023 20:00:18 +0100 Subject: [PATCH] Add UTF-8 support to ansi module. --- ansi.scm | 10 ++++++---- bbstool.scm | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/ansi.scm b/ansi.scm index 542ee04..968d9e1 100644 --- a/ansi.scm +++ b/ansi.scm @@ -43,6 +43,7 @@ (import scheme (chicken base) (chicken string) + (chicken irregex) testing utils) @@ -91,20 +92,20 @@ ;; 1 - seen escape ;; 2 - CSI started (define (ansi-string-length str) - (let loop ((lst (string->list str)) + (let loop ((lst (irregex-extract (irregex "." 'u) str)) (state 0) (len 0)) (if (null? lst) len (let ((ch (car lst))) (case state - ((0) (if (eq? ch #\escape) + ((0) (if (equal? ch "\x1b") (loop (cdr lst) 1 len) (loop (cdr lst) 0 (add1 len)))) - ((1) (if (eq? ch #\[) + ((1) (if (equal? ch "[") (loop (cdr lst) 2 len) (loop (cdr lst) 0 len))) - ((2) (if (eq? ch #\m) + ((2) (if (equal? ch "m") (loop (cdr lst) 0 len) (loop (cdr lst) 2 len)))))))) @@ -118,6 +119,7 @@ (test-eq? ansi-string-length (ansi-string-length "test") 4) (test-eq? ansi-string-length (ansi-string-length "\x1b[1mtest") 4) (test-eq? ansi-string-length (ansi-string-length "\x1b[30mtest\x1b[0m") 4) + (test-eq? ansi-string-length (ansi-string-length "\x1b[30mščřž\x1b[0m") 4) )) ) diff --git a/bbstool.scm b/bbstool.scm index bd681e4..1e734bb 100644 --- a/bbstool.scm +++ b/bbstool.scm @@ -37,7 +37,8 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. members-base primes member-record - configuration) + configuration + table) ;; Print banner (print "bbstool 0.4 (c) 2023 Brmlab, z.s.") @@ -95,6 +96,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. (members-base-tests!) (primes-tests!) (member-record-tests!) + (table-tests!) (newline)) ;; Load the members database (required for everything anyway)