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{"&lt;", "&gt;", "&#34;", "&#39;", "&amp;"}
    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  }