commit 33b0308b198a1d7dcee89edcb551ab2bbad02f6a
parent 4d76c8be3e8b8c20b3ee5fa3d5379360f20ae486
Author: Sean Enck <sean@ttypty.com>
Date: Sat, 7 Dec 2024 12:59:39 -0500
Wrap belongs in core
Diffstat:
6 files changed, 91 insertions(+), 77 deletions(-)
diff --git a/internal/app/core.go b/internal/app/core.go
@@ -13,7 +13,7 @@ import (
"text/template"
"github.com/seanenck/lockbox/internal/backend"
- "github.com/seanenck/lockbox/internal/config"
+ "github.com/seanenck/lockbox/internal/core"
"github.com/seanenck/lockbox/internal/platform"
)
@@ -295,7 +295,7 @@ func processDoc(header, file string, doc Documentation) (string, error) {
if err := t.Execute(&buf, doc); err != nil {
return "", err
}
- return fmt.Sprintf("%s\n%s", header, config.Wrap(0, buf.String())), nil
+ return fmt.Sprintf("%s\n%s", header, core.TextWrap(0, buf.String())), nil
}
func setDocFlag(f string) string {
diff --git a/internal/config/core.go b/internal/config/core.go
@@ -2,7 +2,6 @@
package config
import (
- "bytes"
"fmt"
"net/url"
"os"
@@ -151,60 +150,6 @@ func Environ(set ...string) []string {
return results
}
-// Wrap performs simple block text word wrapping
-func Wrap(indent uint, in string) string {
- var sections []string
- var cur []string
- for _, line := range strings.Split(strings.TrimSpace(in), "\n") {
- trimmed := strings.TrimSpace(line)
- if trimmed == "" {
- if len(cur) > 0 {
- sections = append(sections, strings.Join(cur, " "))
- cur = []string{}
- }
- continue
- }
- cur = append(cur, line)
- }
- if len(cur) > 0 {
- sections = append(sections, strings.Join(cur, " "))
- }
- var out bytes.Buffer
- indenting := ""
- var cnt uint
- for cnt < indent {
- indenting = fmt.Sprintf("%s ", indenting)
- cnt++
- }
- indenture := int(80 - indent)
- for _, s := range sections {
- for _, line := range strings.Split(wrap(s, indenture), "\n") {
- fmt.Fprintf(&out, "%s%s\n", indenting, line)
- }
- fmt.Fprint(&out, "\n")
- }
- return out.String()
-}
-
-func wrap(in string, maxLength int) string {
- var lines []string
- var cur []string
- for _, p := range strings.Split(in, " ") {
- state := strings.Join(cur, " ")
- l := len(p)
- if len(state)+l >= maxLength {
- lines = append(lines, strings.Join(cur, " "))
- cur = []string{p}
- } else {
- cur = append(cur, p)
- }
- }
- if len(cur) > 0 {
- lines = append(lines, strings.Join(cur, " "))
- }
- return strings.Join(lines, "\n")
-}
-
func environmentRegister[T printer](obj T) T {
registry[obj.self().Key()] = obj
return obj
diff --git a/internal/config/core_test.go b/internal/config/core_test.go
@@ -113,25 +113,6 @@ func TestEnviron(t *testing.T) {
}
}
-func TestWrap(t *testing.T) {
- w := config.Wrap(0, "")
- if w != "" {
- t.Errorf("invalid wrap: %s", w)
- }
- w = config.Wrap(0, "abc\n\nabc\nxyz\n")
- if w != "abc\n\nabc xyz\n\n" {
- t.Errorf("invalid wrap: %s", w)
- }
- w = config.Wrap(0, "abc\n\nabc\nxyz\n\nx")
- if w != "abc\n\nabc xyz\n\nx\n\n" {
- t.Errorf("invalid wrap: %s", w)
- }
- w = config.Wrap(5, "abc\n\nabc\nxyz\n\nx")
- if w != " abc\n\n abc xyz\n\n x\n\n" {
- t.Errorf("invalid wrap: %s", w)
- }
-}
-
func TestCanColor(t *testing.T) {
os.Clearenv()
if can, _ := config.CanColor(); !can {
diff --git a/internal/config/toml.go b/internal/config/toml.go
@@ -10,6 +10,7 @@ import (
"strings"
"github.com/BurntSushi/toml"
+ "github.com/seanenck/lockbox/internal/core"
)
const (
@@ -118,7 +119,7 @@ func generateDetailText(data printer) (string, error) {
value = "(unset)"
}
key := env.Key()
- description := strings.TrimSpace(Wrap(2, env.desc))
+ description := strings.TrimSpace(core.TextWrap(2, env.desc))
requirement := "optional/default"
r := strings.TrimSpace(env.requirement)
if r != "" {
diff --git a/internal/core/text.go b/internal/core/text.go
@@ -0,0 +1,61 @@
+package core
+
+import (
+ "bytes"
+ "fmt"
+ "strings"
+)
+
+// TextWrap performs simple block text word wrapping
+func TextWrap(indent uint, in string) string {
+ var sections []string
+ var cur []string
+ for _, line := range strings.Split(strings.TrimSpace(in), "\n") {
+ trimmed := strings.TrimSpace(line)
+ if trimmed == "" {
+ if len(cur) > 0 {
+ sections = append(sections, strings.Join(cur, " "))
+ cur = []string{}
+ }
+ continue
+ }
+ cur = append(cur, line)
+ }
+ if len(cur) > 0 {
+ sections = append(sections, strings.Join(cur, " "))
+ }
+ var out bytes.Buffer
+ indenting := ""
+ var cnt uint
+ for cnt < indent {
+ indenting = fmt.Sprintf("%s ", indenting)
+ cnt++
+ }
+ indenture := int(80 - indent)
+ for _, s := range sections {
+ for _, line := range strings.Split(wrap(s, indenture), "\n") {
+ fmt.Fprintf(&out, "%s%s\n", indenting, line)
+ }
+ fmt.Fprint(&out, "\n")
+ }
+ return out.String()
+}
+
+func wrap(in string, maxLength int) string {
+ var lines []string
+ var cur []string
+ for _, p := range strings.Split(in, " ") {
+ state := strings.Join(cur, " ")
+ l := len(p)
+ if len(state)+l >= maxLength {
+ lines = append(lines, strings.Join(cur, " "))
+ cur = []string{p}
+ } else {
+ cur = append(cur, p)
+ }
+ }
+ if len(cur) > 0 {
+ lines = append(lines, strings.Join(cur, " "))
+ }
+ return strings.Join(lines, "\n")
+}
diff --git a/internal/core/text_test.go b/internal/core/text_test.go
@@ -0,0 +1,26 @@
+package core_test
+
+import (
+ "testing"
+
+ "github.com/seanenck/lockbox/internal/core"
+)
+
+func TestWrap(t *testing.T) {
+ w := core.TextWrap(0, "")
+ if w != "" {
+ t.Errorf("invalid wrap: %s", w)
+ }
+ w = core.TextWrap(0, "abc\n\nabc\nxyz\n")
+ if w != "abc\n\nabc xyz\n\n" {
+ t.Errorf("invalid wrap: %s", w)
+ }
+ w = core.TextWrap(0, "abc\n\nabc\nxyz\n\nx")
+ if w != "abc\n\nabc xyz\n\nx\n\n" {
+ t.Errorf("invalid wrap: %s", w)
+ }
+ w = core.TextWrap(5, "abc\n\nabc\nxyz\n\nx")
+ if w != " abc\n\n abc xyz\n\n x\n\n" {
+ t.Errorf("invalid wrap: %s", w)
+ }
+}