github.com/ngocphuongnb/tetua@v0.0.7-alpha/views/jade.go (about) 1 // Code generated by "jade.go"; DO NOT EDIT. 2 package views 3 4 import ( 5 "bytes" 6 "bufio" 7 "strconv" 8 ) 9 10 var ( 11 escaped = []byte{'<', '>', '"', '\'', '&'} 12 replacing = []string{"<", ">", """, "'", "&"} 13 ) 14 15 func WriteEscString(st string, buffer *WriterAsBuffer) { 16 for i := 0; i < len(st); i++ { 17 if n := bytes.IndexByte(escaped, st[i]); n >= 0 { 18 buffer.WriteString(replacing[n]) 19 } else { 20 buffer.WriteByte(st[i]) 21 } 22 } 23 buffer.Flush() 24 } 25 26 type WriterAsBuffer struct { 27 *bufio.Writer 28 } 29 30 func (w *WriterAsBuffer) WriteString(s string) (n int, err error) { 31 n, err = w.Write([]byte(s)) 32 w.Flush() 33 return 34 } 35 36 func (w *WriterAsBuffer) WriteByte(b byte) (err error) { 37 _, err = w.Write([]byte{b}) 38 w.Flush() 39 return 40 } 41 42 type stringer interface { 43 String() string 44 } 45 46 func WriteAll(a interface{}, escape bool, buffer *WriterAsBuffer) { 47 switch v := a.(type) { 48 case string: 49 if escape { 50 WriteEscString(v, buffer) 51 } else { 52 buffer.WriteString(v) 53 } 54 case int: 55 WriteInt(int64(v), buffer) 56 case int8: 57 WriteInt(int64(v), buffer) 58 case int16: 59 WriteInt(int64(v), buffer) 60 case int32: 61 WriteInt(int64(v), buffer) 62 case int64: 63 WriteInt(v, buffer) 64 case uint: 65 WriteUint(uint64(v), buffer) 66 case uint8: 67 WriteUint(uint64(v), buffer) 68 case uint16: 69 WriteUint(uint64(v), buffer) 70 case uint32: 71 WriteUint(uint64(v), buffer) 72 case uint64: 73 WriteUint(v, buffer) 74 case float32: 75 buffer.WriteString(strconv.FormatFloat(float64(v), 'f', -1, 64)) 76 case float64: 77 buffer.WriteString(strconv.FormatFloat(v, 'f', -1, 64)) 78 case bool: 79 WriteBool(v, buffer) 80 case stringer: 81 if escape { 82 WriteEscString(v.String(), buffer) 83 } else { 84 buffer.WriteString(v.String()) 85 } 86 default: 87 buffer.WriteString("\n<<< unprinted type, fmt.Stringer implementation needed >>>\n") 88 } 89 buffer.Flush() 90 } 91 92 func ternary(condition bool, iftrue, iffalse interface{}) interface{} { 93 if condition { 94 return iftrue 95 } else { 96 return iffalse 97 } 98 } 99 100 // Used part of go source: 101 // https://github.com/golang/go/blob/master/src/strconv/itoa.go 102 func WriteUint(u uint64, buffer *WriterAsBuffer) { 103 var a [64 + 1]byte 104 i := len(a) 105 106 if ^uintptr(0)>>32 == 0 { 107 for u > uint64(^uintptr(0)) { 108 q := u / 1e9 109 us := uintptr(u - q*1e9) 110 for j := 9; j > 0; j-- { 111 i-- 112 qs := us / 10 113 a[i] = byte(us - qs*10 + '0') 114 us = qs 115 } 116 u = q 117 } 118 } 119 120 us := uintptr(u) 121 for us >= 10 { 122 i-- 123 q := us / 10 124 a[i] = byte(us - q*10 + '0') 125 us = q 126 } 127 128 i-- 129 a[i] = byte(us + '0') 130 buffer.Write(a[i:]) 131 } 132 func WriteInt(i int64, buffer *WriterAsBuffer) { 133 if i < 0 { 134 buffer.WriteByte('-') 135 i = -i 136 } 137 WriteUint(uint64(i), buffer) 138 } 139 func WriteBool(b bool, buffer *WriterAsBuffer) { 140 if b { 141 buffer.WriteString("true") 142 return 143 } 144 buffer.WriteString("false") 145 }