summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/text/transform.go14
-rw-r--r--common/text/transform_test.go18
2 files changed, 32 insertions, 0 deletions
diff --git a/common/text/transform.go b/common/text/transform.go
index b324b54c1..2b05b9b4f 100644
--- a/common/text/transform.go
+++ b/common/text/transform.go
@@ -61,3 +61,17 @@ func Puts(s string) string {
}
return s + "\n"
}
+
+// VisitLinesAfter calls the given function for each line, including newlines, in the given string.
+func VisitLinesAfter(s string, fn func(line string)) {
+ high := strings.Index(s, "\n")
+ for high != -1 {
+ fn(s[:high+1])
+ s = s[high+1:]
+ high = strings.Index(s, "\n")
+ }
+
+ if s != "" {
+ fn(s)
+ }
+}
diff --git a/common/text/transform_test.go b/common/text/transform_test.go
index 992dd524c..10738aee7 100644
--- a/common/text/transform_test.go
+++ b/common/text/transform_test.go
@@ -41,3 +41,21 @@ func TestPuts(t *testing.T) {
c.Assert(Puts("\nA\n"), qt.Equals, "\nA\n")
c.Assert(Puts(""), qt.Equals, "")
}
+
+func TestVisitLinesAfter(t *testing.T) {
+ const lines = `line 1
+line 2
+
+line 3`
+
+ var collected []string
+
+ VisitLinesAfter(lines, func(s string) {
+ collected = append(collected, s)
+ })
+
+ c := qt.New(t)
+
+ c.Assert(collected, qt.DeepEquals, []string{"line 1\n", "line 2\n", "\n", "line 3"})
+
+}