...
1
2 package xmain
3
4 import "strings"
5
6 func wrap(i, w int, s string) string {
7 if w == 0 {
8 return strings.Replace(s, "\n", "\n"+strings.Repeat(" ", i), -1)
9 }
10 wrap := w - i
11 var r, l string
12 if wrap < 24 {
13 i = 16
14 wrap = w - i
15 r += "\n" + strings.Repeat(" ", i)
16 }
17 if wrap < 24 {
18 return strings.Replace(s, "\n", r, -1)
19 }
20 slop := 5
21 wrap = wrap - slop
22 l, s = wrapN(wrap, slop, s)
23 r = r + strings.Replace(l, "\n", "\n"+strings.Repeat(" ", i), -1)
24 for s != "" {
25 var t string
26 t, s = wrapN(wrap, slop, s)
27 r = r + "\n" + strings.Repeat(" ", i) + strings.Replace(t, "\n", "\n"+strings.Repeat(" ", i), -1)
28 }
29 return r
30 }
31
32 func wrapN(i, slop int, s string) (string, string) {
33 if i+slop > len(s) {
34 return s, ""
35 }
36 w := strings.LastIndexAny(s[:i], " \t\n")
37 if w <= 0 {
38 return s, ""
39 }
40 nlPos := strings.LastIndex(s[:i], "\n")
41 if nlPos > 0 && nlPos < w {
42 return s[:nlPos], s[nlPos+1:]
43 }
44 return s[:w], s[w+1:]
45 }
46
View as plain text