aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/util/util.go
diff options
context:
space:
mode:
authorJP Appel <jeanpierre.appel01@gmail.com>2024-10-08 13:17:03 -0400
committerJP Appel <jeanpierre.appel01@gmail.com>2024-10-08 13:17:03 -0400
commit13c771c84e6b86cebe6df14d0e92001f940581ba (patch)
tree4b76f90de9c783dc3cb5da633bfc8434964e039d /util/util.go
parent3b0e5c790ff51756c1317f4af83a2f0b0e66efd9 (diff)
Move ansi stripper to util package
Diffstat (limited to 'util/util.go')
-rw-r--r--util/util.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/util/util.go b/util/util.go
new file mode 100644
index 0000000..deb528b
--- /dev/null
+++ b/util/util.go
@@ -0,0 +1,38 @@
+package util
+
+import (
+ "io"
+ "regexp"
+)
+
+// Strip ansi control characters from source
+//
+// The source reader is automatically closed when stripper reader is
+type AnsiStripper struct {
+ regex regexp.Regexp
+ source io.ReadCloser
+}
+
+func NewAnsiStripper(source io.ReadCloser) *AnsiStripper {
+ striper := new(AnsiStripper)
+ striper.regex = *regexp.MustCompile(`\x1b[[0-9;]*m`)
+ striper.source = source
+
+ return striper
+}
+
+func (rc AnsiStripper) Read(p []byte) (int, error) {
+ n, err := rc.source.Read(p)
+ if err != io.EOF && err != nil {
+ return n, err
+ }
+
+ stripped := rc.regex.ReplaceAll(p[:n], []byte(""))
+ n = copy(p, stripped)
+
+ return n, err
+}
+
+func (rc AnsiStripper) Close() error {
+ return rc.source.Close()
+}