package utilities
import (
"os/exec"
"regexp"
"runtime"
"strings"
"time"
"unicode"
"golang.org/x/net/html"
)
const (
reset = "\033[0m"
boldblue = "\033[34;1m"
boldmagenta = "\033[35;1m"
green = "\033[32m"
)
func OpenLink(url string) {
var open string
if runtime.GOOS == "linux" {
open = "xdg-open"
} else {
return
}
command := exec.Command(open, url)
_ = command.Start()
}
func StripHTMLTags(text string) string {
token := html.NewTokenizer(strings.NewReader(text))
var builder strings.Builder
for {
tt := token.Next()
switch tt {
case html.ErrorToken:
return builder.String()
case html.TextToken:
text := token.Token().Data
builder.WriteString(text)
case html.StartTagToken, html.EndTagToken:
tag := token.Token().String()
builder.WriteString(transformTag(tag))
}
}
}
func transformTag(tag string) string {
switch tag {
case "
":
return "\n"
case "
", "
": return "\n" } return "" } func WrapLines(text, separator string, charLimit int) string { lines := strings.Split(text, "\n") if len(lines) == 1 { return wrapLine(lines[0], separator, charLimit) } var builder strings.Builder for i, line := range lines { builder.WriteString(wrapLine(line, separator, charLimit)) if i < len(lines)-1 { builder.WriteString(separator) } } return builder.String() } func wrapLine(line, separator string, charLimit int) string { if len(line) <= charLimit { return line } leftcursor, rightcursor := 0, 0 var builder strings.Builder for rightcursor < (len(line) - charLimit) { rightcursor += charLimit for !unicode.IsSpace(rune(line[rightcursor-1])) { rightcursor-- } builder.WriteString(line[leftcursor:rightcursor] + separator) leftcursor = rightcursor } builder.WriteString(line[rightcursor:]) return builder.String() } func HeaderFormat(text string) string { return boldblue + text + reset } func FieldFormat(text string) string { return green + text + reset } func DisplayNameFormat(text string) string { // use this pattern to remove all emoji strings pattern := regexp.MustCompile(`\s:[A-Za-z0-9]*:`) return boldmagenta + pattern.ReplaceAllString(text, "") + reset } func FormatDate(date time.Time) string { return date.Local().Format("02 Jan 2006") } func FormatTime(date time.Time) string { return date.Local().Format("02 Jan 2006, 15:04 (MST)") }