Implement Capitalization (#118)

This commit is contained in:
Leonardo
2021-08-25 15:58:17 +02:00
committed by GitHub
parent 49f2da7fed
commit e9eb51845e
4 changed files with 62 additions and 1 deletions
+10 -1
View File
@@ -3,6 +3,7 @@ package ansi
import (
"bytes"
"io"
"strings"
"text/template"
"github.com/muesli/termenv"
@@ -38,13 +39,21 @@ func renderText(w io.Writer, p termenv.Profile, rules StylePrimitive, s string)
out := termenv.String(s)
if rules.Upper != nil && *rules.Upper {
out = termenv.String(strings.ToUpper(s))
}
if rules.Lower != nil && *rules.Lower {
out = termenv.String(strings.ToLower(s))
}
if rules.Title != nil && *rules.Title {
out = termenv.String(strings.Title(s))
}
if rules.Color != nil {
out = out.Foreground(p.Color(*rules.Color))
}
if rules.BackgroundColor != nil {
out = out.Background(p.Color(*rules.BackgroundColor))
}
if rules.Underline != nil && *rules.Underline {
out = out.Underline()
}
+15
View File
@@ -45,6 +45,9 @@ type StylePrimitive struct {
BackgroundColor *string `json:"background_color,omitempty"`
Underline *bool `json:"underline,omitempty"`
Bold *bool `json:"bold,omitempty"`
Upper *bool `json:"upper,omitempty"`
Lower *bool `json:"lower,omitempty"`
Title *bool `json:"title,omitempty"`
Italic *bool `json:"italic,omitempty"`
CrossedOut *bool `json:"crossed_out,omitempty"`
Faint *bool `json:"faint,omitempty"`
@@ -151,6 +154,9 @@ func cascadeStyle(parent StyleBlock, child StyleBlock, toBlock bool) StyleBlock
s.BackgroundColor = parent.BackgroundColor
s.Underline = parent.Underline
s.Bold = parent.Bold
s.Upper = parent.Upper
s.Title = parent.Title
s.Lower = parent.Lower
s.Italic = parent.Italic
s.CrossedOut = parent.CrossedOut
s.Faint = parent.Faint
@@ -186,6 +192,15 @@ func cascadeStyle(parent StyleBlock, child StyleBlock, toBlock bool) StyleBlock
if child.Bold != nil {
s.Bold = child.Bold
}
if child.Upper != nil {
s.Upper = child.Upper
}
if child.Lower != nil {
s.Lower = child.Lower
}
if child.Title != nil {
s.Title = child.Title
}
if child.Italic != nil {
s.Italic = child.Italic
}
+30
View File
@@ -188,3 +188,33 @@ func TestRenderHelpers(t *testing.T) {
string(td), b)
}
}
func TestCapitalization(t *testing.T) {
p := true
style := DarkStyleConfig
style.H1.Upper = &p
style.H2.Title = &p
style.H3.Lower = &p
r, err := NewTermRenderer(
WithStyles(style),
)
if err != nil {
t.Fatal(err)
}
b, err := r.Render("# everything is uppercase\n## everything is titled\n### everything is lowercase")
if err != nil {
t.Fatal(err)
}
// expected outcome
td, err := ioutil.ReadFile("testdata/capitalization.test")
if err != nil {
t.Fatal(err)
}
if string(td) != b {
t.Errorf("Rendered output doesn't match!\nExpected: `\n%s`\nGot: `\n%s`\n", td, b)
}
}
+7
View File
@@ -0,0 +1,7 @@
  EVERYTHING IS UPPERCASE                                                    
                                                                             
 ## Everything Is Titled                                                     
                                                                             
 ### everything is lowercase