String conversion functions for lipgloss Styles.
This library defines the following two functions:
type Style = lipgloss.Style
// Import reads style specifications from the input string
// and sets the corresponding properties in the dst style.
func Import(dst Style, input string) (Style, error)
// Export emits style specifications that represent
// the given style.
func Export(s Style) string
For example:
import (
"fmt"
"github.com/charmbracelet/lipgloss"
lipglossc "github.com/knz/lipgloss-convert"
)
func main() {
style := lipgloss.NewStyle().
Bold(true).
Align(lipgloss.Center).
Foreground(lipgloss.Color("#FAFAFA")).
Background(lipgloss.AdaptiveColor{"#7D56F4", "#112233"})).
BorderTopForeground(lipgloss.Color("12")).
BorderStyle(lipgloss.RoundedBorder()).
PaddingTop(2).
PaddingLeft(4).
Width(22)
fmt.Println(lipglossc.Export(s))
}
Displays:
align: 0.5;
background: adaptive(#7D56F4,#112233);
bold: true;
border-style: border("─","─","│","│","╭","╮","╯","╰");
border-top-foreground: 12;
foreground: #FAFAFA;
padding-left: 4;
padding-top: 2;
width: 22;
The Import
function applies the text directives specified in its input
argument to the style also provided as argument. Other properties already
in the style remain unchanged.
Which properties are supported? See the lipgloss
documentation
for details. Import
automatically supports all the lipgloss
properties, as follows:
Foreground
in lipgloss becomesforeground
in the textual syntax.UnderlineSpaces
becomesunderline-spaces
.- etc.
Import
also supports the following special cases:
-
For colors:
foreground: #abc; foreground: #aabbcc; foreground: 123; foreground: adaptive(<color>,<color>); foreground: complete(<truecolor>,<ansi256color>,<ansicolor>); foreground: adaptive(<color>,<color>); foreground: adaptive(complete(<truecolor>,<ansi256color>,<ansicolor>),complete(<truecolor>,<ansi256color>,<ansicolor>));
-
Padding, margin, align etc which can take multiple values at once:
margin: 10 margin: 10 20 margin: 10 20 10 20
-
Border styles:
border-style: rounded; border-style: hidden; border-style: normal; border-style: thick; border-style: double;
-
Border styles with top/bottom or left/right selection (see the doc for
lipgloss.Style
'sBorder()
method):border: normal true false; border: normal true false false true;
-
Resetting a style with
clear
: this erases all the properties in the style, to start with a fresh style.