75 lines
1014 B
Go
75 lines
1014 B
Go
package textfmt
|
|
|
|
import "strings"
|
|
|
|
func timesn(s string, n int) string {
|
|
ss := make([]string, n+1)
|
|
return strings.Join(ss, s)
|
|
}
|
|
|
|
func numDigits(n int) int {
|
|
if n == 0 {
|
|
return 1
|
|
}
|
|
|
|
var d int
|
|
for n > 0 {
|
|
d++
|
|
n /= 10
|
|
}
|
|
|
|
return d
|
|
}
|
|
|
|
func maxLength(names []string) int {
|
|
var m int
|
|
for _, n := range names {
|
|
if len([]rune(n)) > m {
|
|
m = len([]rune(n))
|
|
}
|
|
}
|
|
|
|
return m
|
|
}
|
|
|
|
func padRight(s string, n int) string {
|
|
if len(s) >= n {
|
|
return s
|
|
}
|
|
|
|
n -= len([]rune(s))
|
|
return s + timesn(" ", n)
|
|
}
|
|
|
|
func singleLine(text string) string {
|
|
var l []string
|
|
p := strings.Split(text, "\n")
|
|
for _, part := range p {
|
|
part = strings.TrimSpace(part)
|
|
if part == "" {
|
|
continue
|
|
}
|
|
|
|
l = append(l, part)
|
|
}
|
|
|
|
return strings.Join(l, " ")
|
|
}
|
|
|
|
func writeLines(w *writer, txt string, indentFirst, indent int) {
|
|
lines := strings.Split(txt, "\n")
|
|
for i, l := range lines {
|
|
if i > 0 {
|
|
w.write("\n")
|
|
}
|
|
|
|
ind := indentFirst
|
|
if i > 0 {
|
|
ind = indent
|
|
}
|
|
|
|
w.write(timesn(" ", ind))
|
|
w.write(l)
|
|
}
|
|
}
|