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