lockbox

password manager
Log | Files | Refs | README | LICENSE

commit 33b0308b198a1d7dcee89edcb551ab2bbad02f6a
parent 4d76c8be3e8b8c20b3ee5fa3d5379360f20ae486
Author: Sean Enck <sean@ttypty.com>
Date:   Sat,  7 Dec 2024 12:59:39 -0500

Wrap belongs in core

Diffstat:
Minternal/app/core.go | 4++--
Minternal/config/core.go | 55-------------------------------------------------------
Minternal/config/core_test.go | 19-------------------
Minternal/config/toml.go | 3++-
Ainternal/core/text.go | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ainternal/core/text_test.go | 26++++++++++++++++++++++++++
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) + } +}