gob/format/style.go

101 lines
2.2 KiB
Go
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package format
import (
"fmt"
"gitea.zaclys.com/bvaudour/gob/option"
)
// Style permet de définir un style à une chaîne dans un terminal de type UNIX.
type Style struct {
option.Option[int]
}
const (
normal int = 0
bold int = 1
italic int = 3
underline int = 4
blink int = 5
inverted int = 7
crossed int = 9
cancel int = 20
)
var styles = map[string]int{
"normal": normal,
"bold": bold,
"italic": italic,
"underline": underline,
"blink": blink,
"inverted": inverted,
"crossed": crossed,
"!bold": cancel + bold,
"!italic": cancel + italic,
"!underline": cancel + underline,
"!blink": cancel + blink,
"!inverted": cancel + inverted,
"!crossed": cancel + crossed,
}
// IsCancel retourne vrai si le style est une annulation de style.
func (st Style) IsCancel() bool {
v, ok := st.Get()
return ok && v >= 20
}
// IsBold retourne vrai si le style de de type gras.
func (st Style) IsBold() bool {
v, ok := st.Get()
return ok && v|bold != 0
}
// IsNormal retourne vrai si aucun style nest appliqué.
func (st Style) IsNormal() bool {
v, ok := st.Get()
return ok && v == normal
}
// Base retourne la liste des styles.
func (st Style) Base() option.Option[int] {
return st.Option
}
// String retourne la chaine déchappement ASCII du style.
func (st Style) String() string {
if v, ok := st.Get(); ok {
return fmt.Sprintf("%d", v)
}
return ""
}
// Esc retourne léchappement ASCII complet.
func (st Style) Esc() string {
return fmt.Sprintf(escTpl, st.String())
}
// Format formate le texte donné selon le style.
func (st Style) Format(text string) string {
if !st.IsDefined() {
return text
}
return fmt.Sprintf(formatTpl, st.String(), text)
}
// StyleOf retourne le style selon son nom.
// Les noms possibles sont:
// - normal : pas de style particulier
// - bold : chaîne en gras
// - italic : chaîne en italique
// - underline : chaîne soulignée
// - blink : chaîne clignotante
// - inverted : switch entre les couleurs de police et darrière-plan
// - crossed : chaîne rayée
// Le préfixe ! peut être ajouté pour annuler le style.
func StyleOf(name string) (st Style) {
if v, ok := styles[name]; ok {
return Style{option.Some(v)}
}
return
}