-
Notifications
You must be signed in to change notification settings - Fork 0
/
tuiTextTools.go
88 lines (81 loc) · 2.24 KB
/
tuiTextTools.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package main
import (
"fmt"
"github.com/bbrks/wrap"
"strings"
"unicode/utf8"
)
func formatPodcast(p Podcast, max int) string {
var formatBuilder strings.Builder
formatBuilder.WriteString(p.CollectionName)
if p.ArtistName != "" {
formatBuilder.WriteString(" - ")
formatBuilder.WriteString(p.ArtistName)
}
if p.Description != "" {
formatBuilder.WriteString(" - ")
formatBuilder.WriteString(p.Description)
}
formattedString := formatBuilder.String()
if len(formattedString) > max {
formattedString = formattedString[0:max]
}
return formattedString
}
func wrapOrBreakText(configuration *Configuration, formattedPodcast string, width int, selected bool) string {
if selected {
formattedPodcast = wrapString(formattedPodcast, width)
formattedPodcast = termuiStyleText(formattedPodcast, getBackgroundColorForThemeString(configuration), getForegroundColorForThemeString(configuration))
} else if utf8.RuneCountInString(formattedPodcast) > width {
formattedPodcast = substringUTF8(formattedPodcast, 0, width-3)
formattedPodcast += "..."
}
return formattedPodcast
}
func formatPodcastEpisode(p PodcastEpisode) string {
var formatBuilder strings.Builder
formatBuilder.WriteString(p.Title)
if p.Summary != "" {
formatBuilder.WriteString(" - ")
formatBuilder.WriteString(p.Summary)
}
if p.Content != "" {
formatBuilder.WriteString(" - ")
formatBuilder.WriteString(p.Content)
}
return formatBuilder.String()
}
func substringUTF8(input string, begin int, end int) string {
stringStart := 0
i := 0
for j := range input {
if i == begin {
stringStart = j
}
if i == end {
return input[stringStart:j]
}
i++
}
return input[stringStart:]
}
func wrapString(input string, max int) string {
w := wrap.NewWrapper()
w.StripTrailingNewline = true
output := w.Wrap(input, max)
output = sanitizePodcast(output)
return output
}
// lovingly stolen from: https://programming.guide/go/formatting-byte-size-to-human-readable-format.html
func byteCountDecimal(number int64) string {
const unit = 1000
if number < unit {
return fmt.Sprintf("%d B", number)
}
div, exp := int64(unit), 0
for n := number / unit; n >= unit; n /= unit {
div *= unit
exp++
}
return fmt.Sprintf("%.1f %cB", float64(number)/float64(div), "kMGTPE"[exp])
}