mirror of
https://codeberg.org/scip/esctl.git
synced 2026-08-24 09:44:17 +02:00
fix word wrapping
This commit is contained in:
@@ -25,7 +25,6 @@ import (
|
||||
"strings"
|
||||
|
||||
"codeberg.org/scip/esctl/pkg/cfg"
|
||||
"github.com/seeruk/go-wordwrap"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
@@ -161,20 +160,8 @@ func (table *Table) PrintTSV() error {
|
||||
length := visibleLen(entry)
|
||||
|
||||
if length+currentWidth > table.maxwidth && table.maxwidth-currentWidth > 1 {
|
||||
// text is too wide to be put into one line, wrap it
|
||||
wrapper := wordwrap.Wrapper(table.maxwidth-currentWidth, false)
|
||||
wrapped := wrapper(entry)
|
||||
|
||||
// and indent it
|
||||
first := true
|
||||
for line := range strings.Lines(wrapped) {
|
||||
if first {
|
||||
entry = line
|
||||
first = false
|
||||
} else {
|
||||
entry += "\n " + strings.Repeat(" ", currentWidth) + line
|
||||
}
|
||||
}
|
||||
// // text is too wide to be put into one line, wrap it
|
||||
entry = wrap(table.maxwidth-currentWidth, currentWidth+2, entry)
|
||||
}
|
||||
|
||||
currentWidth += table.lenHeaders[idx]
|
||||
@@ -202,6 +189,43 @@ func (table *Table) PrintTSV() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Wrap a text into multiple lines, first line is not indented, all
|
||||
// further lines will be indented. Used within Print() to print large
|
||||
// cell text.
|
||||
func wrap(width, indent int, text string) string {
|
||||
wrapped := ""
|
||||
line := ""
|
||||
|
||||
for word := range strings.FieldsSeq(text) {
|
||||
if len(line)+len(word)+1 <= width {
|
||||
// appending word to current line doesn't exceed width
|
||||
if line != "" {
|
||||
line += " "
|
||||
}
|
||||
line += word
|
||||
} else {
|
||||
// it exceeds it, so we need to wrap
|
||||
if wrapped == "" {
|
||||
// beginning of output, no indenting here
|
||||
wrapped = line + "\n"
|
||||
} else {
|
||||
// we're in the middle of the text, so add the indent
|
||||
wrapped += strings.Repeat(" ", indent) + line + "\n"
|
||||
}
|
||||
|
||||
// remember the current word for the next round
|
||||
line = word
|
||||
}
|
||||
}
|
||||
|
||||
if line != "" {
|
||||
// last line, no newline needed here
|
||||
wrapped += strings.Repeat(" ", indent) + line
|
||||
}
|
||||
|
||||
return wrapped
|
||||
}
|
||||
|
||||
func (table *Table) PrintCSV() error {
|
||||
table.preprocessRows()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user