summaryrefslogtreecommitdiff
path: root/vendor/github.com/fogleman/gg/wrap.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/fogleman/gg/wrap.go')
-rw-r--r--vendor/github.com/fogleman/gg/wrap.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/github.com/fogleman/gg/wrap.go b/vendor/github.com/fogleman/gg/wrap.go
new file mode 100644
index 0000000..3dfe6e1
--- /dev/null
+++ b/vendor/github.com/fogleman/gg/wrap.go
@@ -0,0 +1,58 @@
+package gg
+
+import (
+ "strings"
+ "unicode"
+)
+
+type measureStringer interface {
+ MeasureString(s string) (w, h float64)
+}
+
+func splitOnSpace(x string) []string {
+ var result []string
+ pi := 0
+ ps := false
+ for i, c := range x {
+ s := unicode.IsSpace(c)
+ if s != ps && i > 0 {
+ result = append(result, x[pi:i])
+ pi = i
+ }
+ ps = s
+ }
+ result = append(result, x[pi:])
+ return result
+}
+
+func wordWrap(m measureStringer, s string, width float64) []string {
+ var result []string
+ for _, line := range strings.Split(s, "\n") {
+ fields := splitOnSpace(line)
+ if len(fields)%2 == 1 {
+ fields = append(fields, "")
+ }
+ x := ""
+ for i := 0; i < len(fields); i += 2 {
+ w, _ := m.MeasureString(x + fields[i])
+ if w > width {
+ if x == "" {
+ result = append(result, fields[i])
+ x = ""
+ continue
+ } else {
+ result = append(result, x)
+ x = ""
+ }
+ }
+ x += fields[i] + fields[i+1]
+ }
+ if x != "" {
+ result = append(result, x)
+ }
+ }
+ for i, line := range result {
+ result[i] = strings.TrimSpace(line)
+ }
+ return result
+}