From bf092cd5e508deda64ea3be3e21616a2bab04ba1 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 9 Aug 2022 16:04:14 -0700 Subject: [PATCH] io.streams.ansi: faster by caching styles --- extra/io/streams/ansi/ansi.factor | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/extra/io/streams/ansi/ansi.factor b/extra/io/streams/ansi/ansi.factor index 6a0231bae4..1717f1b6bd 100644 --- a/extra/io/streams/ansi/ansi.factor +++ b/extra/io/streams/ansi/ansi.factor @@ -41,23 +41,23 @@ CONSTANT: colors H{ colors [ keys swap infimum-by ] [ at ] bi dup 8 >= [ 8 - t ] [ f ] if ; -: color>foreground ( color -- string ) +MEMO: color>foreground ( color -- string ) color>ansi [ 30 + ] [ "m" ";1m" ? ] bi* "\e[%d%s" sprintf ; -: color>background ( color -- string ) +MEMO: color>background ( color -- string ) color>ansi [ 40 + ] [ "m" ";1m" ? ] bi* "\e[%d%s" sprintf ; TUPLE: ansi < filter-writer ; C: ansi -M: ansi stream-format - [ - [ foreground of [ color>foreground ] [ "" ] if* ] - [ background of [ color>background ] [ "" ] if* ] - [ font-style of [ font-styles ] [ "" ] if* ] - tri 3append [ "\e[0m" surround ] unless-empty - ] dip stream>> stream-write ; +M:: ansi stream-format ( str style stream -- ) + stream stream>> :> out + style foreground of [ color>foreground out stream-write t ] [ f ] if* + style background of [ color>background out stream-write t ] [ f ] if* + style font-style of [ font-styles out stream-write t ] [ f ] if* + or or [ "\e[0m" out stream-write ] unless + str out stream-write ; M: ansi make-span-stream swap ; -- 2.34.1