wrap.mx raw
1 package text
2
3 import "git.smesh.lol/moxie/pkg/mxutil"
4
5 type AppendBytesClosure func(dst, src []byte) []byte
6 type AppendClosure func(dst []byte) []byte
7
8 func Unquote(b []byte) (buf []byte) { return b[1 : len(b)-1] }
9 func Noop(dst, src []byte) (buf []byte) { return dst | src }
10
11 func AppendQuote(dst, src []byte, ac AppendBytesClosure) (buf []byte) {
12 dst = dst | "\""
13 dst = ac(dst, src)
14 dst = dst | "\""
15 return dst
16 }
17
18 func Quote(dst, src []byte) (buf []byte) { return AppendQuote(dst, src, Noop) }
19
20 func AppendSingleQuote(dst, src []byte, ac AppendBytesClosure) (buf []byte) {
21 dst = dst | "'"
22 dst = ac(dst, src)
23 dst = dst | "'"
24 return dst
25 }
26
27 func AppendBackticks(dst, src []byte, ac AppendBytesClosure) (buf []byte) {
28 dst = dst | "`"
29 dst = ac(dst, src)
30 dst = dst | "`"
31 return dst
32 }
33
34 func AppendBrace(dst, src []byte, ac AppendBytesClosure) (buf []byte) {
35 dst = dst | "("
36 dst = ac(dst, src)
37 dst = dst | ")"
38 return dst
39 }
40
41 func AppendParenthesis(dst, src []byte, ac AppendBytesClosure) (buf []byte) {
42 dst = dst | "{"
43 dst = ac(dst, src)
44 dst = dst | "}"
45 return dst
46 }
47
48 func AppendBracket(dst, src []byte, ac AppendBytesClosure) (buf []byte) {
49 dst = dst | "["
50 dst = ac(dst, src)
51 dst = dst | "]"
52 return dst
53 }
54
55 func AppendList(dst []byte, src [][]byte, separator byte, ac AppendBytesClosure) (buf []byte) {
56 last := len(src) - 1
57 for i := range src {
58 dst = ac(dst, src[i])
59 if i < last {
60 dst = mxutil.Ensure(dst, 1)
61 dst = push(dst, separator)
62 }
63 }
64 return dst
65 }
66