87 lines
2.9 KiB
Markdown
87 lines
2.9 KiB
Markdown
|
||
<p align="center" style="text-align: center">
|
||
<img src="logo.png"><br/>
|
||
</p>
|
||
<p align="center">
|
||
A library for parsing ANSI encoded strings<br/><br/>
|
||
<a href="https://github.com/leaanthony/go-ansi-parser/blob/master/LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg"></a>
|
||
<a href="https://goreportcard.com/report/github.com/leaanthony/go-ansi-parser"><img src="https://goreportcard.com/badge/github.com/leaanthony/go-ansi-parser"/></a>
|
||
<a href="http://godoc.org/github.com/leaanthony/go-ansi-parser"><img src="https://img.shields.io/badge/godoc-reference-blue.svg"/></a>
|
||
<a href="https://github.com/leaanthony/go-ansi-parser/issues"><img src="https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat" alt="CodeFactor" /></a>
|
||
<a href="https://app.fossa.io/projects/git%2Bgithub.com%2Fleaanthony%2Fgo-ansi-parser?ref=badge_shield" alt="FOSSA Status"><img src="https://app.fossa.io/api/projects/git%2Bgithub.com%2Fleaanthony%2Fgo-ansi-parser.svg?type=shield"/></a>
|
||
</p>
|
||
|
||
Go ANSI Parser converts strings with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
|
||
into a slice of structs that represent styled text. Features:
|
||
|
||
* Can parse ANSI 16, 256 and TrueColor
|
||
* Supports all styles: Regular, Bold, Faint, Italic, Blinking, Inversed, Invisible, Underlined, Strikethrough
|
||
* Provides RGB, Hex, HSL, ANSI ID and Name for parsed colours
|
||
* Truncation - works with emojis and grapheme clusters
|
||
* Length - works with emojis and grapheme clusters
|
||
* Cleanse - removes the ansi escape codes
|
||
* Configurable colour map for customisation
|
||
* 100% Test Coverage
|
||
|
||
# Installation
|
||
```shell
|
||
go get github.com/leaanthony/go-ansi-parser
|
||
```
|
||
|
||
## Usage
|
||
|
||
### Parse
|
||
```go
|
||
text, err := ansi.Parse("\u001b[1;31;40mHello World\033[0m")
|
||
|
||
// is the equivalent of...
|
||
|
||
text := []*ansi.StyledText{
|
||
{
|
||
Label: "Hello World",
|
||
FgCol: &ansi.Col{
|
||
Id: 9,
|
||
Hex: "#ff0000",
|
||
Rgb: &ansi.Rgb{ R: 255, G: 0, B: 0 },
|
||
Hsl: &ansi.Hsl{ H: 0, S: 100, L: 50 },
|
||
Name: "Red",
|
||
},
|
||
BgCol: &ansi.Col{
|
||
Id: 0,
|
||
Hex: "#000000",
|
||
Rgb: &ansi.Rgb{0, 0, 0},
|
||
Hsl: &ansi.Hsl{0, 0, 0},
|
||
Name: "Black",
|
||
},
|
||
Style: 1,
|
||
},
|
||
}
|
||
```
|
||
### Truncating
|
||
```go
|
||
shorter, err := ansi.Truncate("\u001b[1;31;40mHello\033[0m \u001b[0;30mWorld!\033[0m", 8)
|
||
|
||
// is the equivalent of...
|
||
|
||
shorter := "\u001b[1;31;40mHello\033[0m \u001b[0;30mWo\033[0m"
|
||
```
|
||
### Cleanse
|
||
```go
|
||
cleaner, err := ansi.Cleanse("\u001b[1;31;40mHello\033[0m \u001b[0;30mWorld!\033[0m")
|
||
|
||
// is the equivalent of...
|
||
|
||
cleaner := "Hello World!"
|
||
```
|
||
### Length
|
||
```go
|
||
length, err := ansi.Length("\u001b[1;31;40mHello\033[0m \u001b[0;30mWorld!\033[0m")
|
||
|
||
// is the equivalent of...
|
||
|
||
length := 12
|
||
|
||
// Works with grapheme clusters and emoji
|
||
length, err := ansi.Length("\u001b[1;31;40m👩🏽🔧😎\033[0m") // 2
|
||
```
|