func (m Mass) Format(fs fmt.State, c rune) { switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "%T(%v)", m, float64(m)) return } fallthrough case 'e', 'E', 'f', 'F', 'g', 'G': p, pOk := fs.Precision() w, wOk := fs.Width() switch { case pOk && wOk: fmt.Fprintf(fs, "%*.*"+string(c), w, p, float64(m)) case pOk: fmt.Fprintf(fs, "%.*"+string(c), p, float64(m)) case wOk: fmt.Fprintf(fs, "%*"+string(c), w, float64(m)) default: fmt.Fprintf(fs, "%"+string(c), float64(m)) } fmt.Fprint(fs, " kg") default: fmt.Fprintf(fs, "%%!%c(%T=%g kg)", c, m, float64(m)) return } }
func (af *ansiFormatter) Format(f fmt.State, c rune) { // reconstruct the format string in bf bf := new(bytes.Buffer) bf.WriteByte('%') for _, x := range []byte{'-', '+', '#', ' ', '0'} { if f.Flag(int(x)) { bf.WriteByte(x) } } if w, ok := f.Width(); ok { fmt.Fprint(bf, w) } if p, ok := f.Precision(); ok { fmt.Fprintf(bf, ".%d", p) } bf.WriteRune(c) format := bf.String() if len(af.codes) == 0 { fmt.Fprintf(f, format, af.value) return } fmt.Fprintf(f, "\x1b[%d", af.codes[0]) for _, code := range af.codes[1:] { fmt.Fprintf(f, ";%d", code) } f.Write([]byte{'m'}) fmt.Fprintf(f, format, af.value) fmt.Fprint(f, "\x1b[0m") }
func (v value) Format(f fmt.State, c rune) { if debug || f.Flag('#') { fmt.Fprintf(f, "%s["+v.format+"]", typeName(v.v), v.v) } else { fmt.Fprintf(f, v.format, v.v) } }
// Format formats the frame according to the fmt.Formatter interface. // // %s source file // %d source line // %n function name // %v equivalent to %s:%d // // Format accepts flags that alter the printing of some verbs, as follows: // // %+s path of source file relative to the compile time GOPATH // %+v equivalent to %+s:%d func (f Frame) Format(s fmt.State, verb rune) { switch verb { case 's': switch { case s.Flag('+'): pc := f.pc() fn := runtime.FuncForPC(pc) if fn == nil { io.WriteString(s, "unknown") } else { file, _ := fn.FileLine(pc) fmt.Fprintf(s, "%s\n\t%s", fn.Name(), file) } default: io.WriteString(s, path.Base(f.file())) } case 'd': fmt.Fprintf(s, "%d", f.line()) case 'n': name := runtime.FuncForPC(f.pc()).Name() io.WriteString(s, funcname(name)) case 'v': f.Format(s, 's') io.WriteString(s, ":") f.Format(s, 'd') } }
// Format makes Unit satisfy the fmt.Formatter interface. The unit is formatted // with dimensions appended. If the power if the dimension is not zero or one, // symbol^power is appended, if the power is one, just the symbol is appended // and if the power is zero, nothing is appended. Dimensions are appended // in order by symbol name with positive powers ahead of negative powers. func (u *Unit) Format(fs fmt.State, c rune) { if u == nil { fmt.Fprint(fs, "<nil>") } switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "&%#v", *u) return } fallthrough case 'e', 'E', 'f', 'F', 'g', 'G': p, pOk := fs.Precision() w, wOk := fs.Width() switch { case pOk && wOk: fmt.Fprintf(fs, "%*.*"+string(c), w, p, u.value) case pOk: fmt.Fprintf(fs, "%.*"+string(c), p, u.value) case wOk: fmt.Fprintf(fs, "%*"+string(c), w, u.value) default: fmt.Fprintf(fs, "%"+string(c), u.value) } default: fmt.Fprintf(fs, "%%!%c(*Unit=%g)", c, u) return } if u.formatted == "" && len(u.dimensions) > 0 { u.formatted = u.dimensions.String() } fmt.Fprintf(fs, " %s", u.formatted) }
// Format may call Sprint(f) or Fprint(f) etc. to generate its output. func (e *goof) Format(f fmt.State, c rune) { s := e.getMessage(e.includeFieldsInFormat) fs := &bytes.Buffer{} fs.WriteRune('%') if f.Flag('+') { fs.WriteRune('+') } if f.Flag('-') { fs.WriteRune('-') } if f.Flag('#') { fs.WriteRune('#') } if f.Flag(' ') { fs.WriteRune(' ') } if f.Flag('0') { fs.WriteRune('0') } if w, ok := f.Width(); ok { fs.WriteString(fmt.Sprintf("%d", w)) } if p, ok := f.Precision(); ok { fs.WriteString(fmt.Sprintf("%d", p)) } fs.WriteRune(c) fmt.Fprintf(f, fs.String(), s) }
// fmtFlag computes the (internal) FmtFlag // value given the fmt.State and format verb. func fmtFlag(s fmt.State, verb rune) FmtFlag { var flag FmtFlag if s.Flag('-') { flag |= FmtLeft } if s.Flag('#') { flag |= FmtSharp } if s.Flag('+') { flag |= FmtSign } if s.Flag(' ') { flag |= FmtUnsigned } if _, ok := s.Precision(); ok { flag |= FmtComma } if s.Flag('0') { flag |= FmtByte } switch verb { case 'S': flag |= FmtShort case 'L': flag |= FmtLong } return flag }
// Format satisfies the fmt.Formatter interface. func (f formatter) Format(fs fmt.State, c rune) { if c == 'v' && fs.Flag('#') { fmt.Fprintf(fs, "%#v", f.matrix) return } format(f.matrix, f.prefix, f.margin, f.dot, f.squeeze, fs, c) }
func (st *stacktrace) Format(f fmt.State, c rune) { var text string if f.Flag('+') && !f.Flag('#') && c == 's' { // "%+s" text = formatFull(st) } else if f.Flag('#') && !f.Flag('+') && c == 's' { // "%#s" text = formatBrief(st) } else { text = map[Format]func(*stacktrace) string{ FormatFull: formatFull, FormatBrief: formatBrief, }[DefaultFormat](st) } formatString := "%" // keep the flags recognized by fmt package for _, flag := range "-+# 0" { if f.Flag(int(flag)) { formatString += string(flag) } } if width, has := f.Width(); has { formatString += fmt.Sprint(width) } if precision, has := f.Precision(); has { formatString += "." formatString += fmt.Sprint(precision) } formatString += string(c) fmt.Fprintf(f, formatString, text) }
func (e escapable) Format(f fmt.State, c rune) { s := "%" for i := 0; i < 128; i++ { if f.Flag(i) { s += string(i) } } if w, ok := f.Width(); ok { s += fmt.Sprintf("%d", w) } if p, ok := f.Precision(); ok { s += fmt.Sprintf(".%d", p) } // If we have an uppercase format char and a slice, format each slice // element if unicode.IsUpper(c) && reflect.TypeOf(e.x).Kind() == reflect.Slice { s += strings.ToLower(string(c)) v := reflect.ValueOf(e.x) for i := 0; i < v.Len(); i++ { formatted := fmt.Sprintf(s, v.Index(i)) io.WriteString(f, ReadableEscapeArg(formatted)) if i+1 != v.Len() { io.WriteString(f, " ") } } return } s += string(c) formatted := fmt.Sprintf(s, e.x) io.WriteString(f, ReadableEscapeArg(formatted)) }
func (m fm) Format(fs fmt.State, c rune) { if c == 'v' && fs.Flag('#') { fmt.Fprintf(fs, "%#v", m.Matrix) return } Format(m.Matrix, m.margin, '.', fs, c) }
func (fo formatter) Format(f fmt.State, c rune) { if c == 'v' && f.Flag('#') && f.Flag(' ') { fo.format(f) return } fo.passThrough(f, c) }
// Format is a support routine for fmt.Formatter. It accepts // the formats 'b' (binary), 'o' (octal), 'd' (decimal), 'x' // (lowercase hexadecimal), and 'X' (uppercase hexadecimal). // func (x *Int) Format(s fmt.State, ch int) { cs := charset(ch) // special cases switch { case cs == "": // unknown format fmt.Fprintf(s, "%%!%c(big.Int=%s)", ch, x.String()) return case x == nil: fmt.Fprint(s, "<nil>") return } // determine format format := "%s" if s.Flag('#') { switch ch { case 'o': format = "0%s" case 'x': format = "0x%s" case 'X': format = "0X%s" } } if x.neg { format = "-" + format } fmt.Fprintf(s, format, x.abs.string(cs)) }
func format(b Bed, fs fmt.State, c rune) { bv := reflect.ValueOf(b) if bv.IsNil() { fmt.Fprint(fs, "<nil>") return } bv = bv.Elem() switch c { case 'v': if fs.Flag('#') { fmt.Fprintf(fs, "&%#v", bv.Interface()) return } fallthrough case 's': width, _ := fs.Width() if !b.canBed(width) { fmt.Fprintf(fs, "%%!(BADWIDTH)%T", b) return } if width == 0 { width = bv.NumField() } for i := 0; i < width; i++ { f := bv.Field(i).Interface() if i >= rgbField { switch i { case rgbField: rv := reflect.ValueOf(f) if reflect.DeepEqual(rv.Interface(), color.RGBA{}) { fs.Write([]byte{'0'}) } else { fmt.Fprintf(fs, "%d,%d,%d", rv.Field(0).Interface(), rv.Field(1).Interface(), rv.Field(2).Interface()) } case blockCountField: fmt.Fprint(fs, f) case blockSizesField, blockStartsField: av := reflect.ValueOf(f) l := av.Len() for j := 0; j < l; j++ { fmt.Fprint(fs, av.Index(j).Interface()) if j < l-1 { fs.Write([]byte{','}) } } } } else { fmt.Fprint(fs, f) } if i < width-1 { fs.Write([]byte{'\t'}) } } default: fmt.Fprintf(fs, "%%!%c(%T=%3s)", c, b, b) } }
// Format implements the fmt.Formatter interface. func (v val) Format(s fmt.State, c rune) { if c == 'v' || c == 's' { fprint(s, reflect.ValueOf(v.v), state{ defaults: s.Flag('+') || s.Flag('#'), }) } else { fmt.Fprintf(s, "%%!%c(pretty.Val)", c) } }
func (fo formatter) Format(f fmt.State, c rune) { if fo.force || c == 'v' && f.Flag('#') && f.Flag(' ') { w := tabwriter.NewWriter(f, 4, 4, 1, ' ', 0) p := &printer{tw: w, Writer: w, visited: make(map[visit]int)} p.printValue(reflect.ValueOf(fo.x), true, fo.quote) w.Flush() return } fo.passThrough(f, c) }
func (e _error) Format(s fmt.State, verb rune) { switch verb { case 'v': if s.Flag('+') { fmt.Fprintf(s, "%+v: ", e.Stacktrace()[0]) } fallthrough case 's': io.WriteString(s, e.msg) } }
func (s *stack) Format(st fmt.State, verb rune) { switch verb { case 'v': switch { case st.Flag('+'): for _, pc := range *s { f := Frame(pc) fmt.Fprintf(st, "\n%+v", f) } } } }
func (w *withMessage) Format(s fmt.State, verb rune) { switch verb { case 'v': if s.Flag('+') { fmt.Fprintf(s, "%+v\n", w.Cause()) io.WriteString(s, w.msg) return } fallthrough case 's', 'q': io.WriteString(s, w.Error()) } }
func (w wrapper) Format(s fmt.State, verb rune) { switch verb { case 'v': if s.Flag('+') { fmt.Fprintf(s, "%+v\n", w.Cause()) fmt.Fprintf(s, "%+v: %s", w.Stacktrace()[0], w.msg) return } fallthrough case 's': io.WriteString(s, w.Error()) } }
func (f *fundamental) Format(s fmt.State, verb rune) { switch verb { case 'v': if s.Flag('+') { io.WriteString(s, f.msg) f.stack.Format(s, verb) return } fallthrough case 's', 'q': io.WriteString(s, f.msg) } }
func (w *withStack) Format(s fmt.State, verb rune) { switch verb { case 'v': if s.Flag('+') { fmt.Fprintf(s, "%+v", w.Cause()) w.stack.Format(s, verb) return } fallthrough case 's': io.WriteString(s, w.Error()) case 'q': fmt.Fprintf(s, "%q", w.Error()) } }
func (fo formatter) passThrough(f fmt.State, c rune) { s := "%" for i := 0; i < 128; i++ { if f.Flag(i) { s += string(i) } } if w, ok := f.Width(); ok { s += fmt.Sprintf("%d", w) } if p, ok := f.Precision(); ok { s += fmt.Sprintf(".%d", p) } s += string(c) fmt.Fprintf(f, s, fo.x) }
func (e escapable) Format(f fmt.State, c rune) { s := "%" for i := 0; i < 128; i++ { if f.Flag(i) { s += string(i) } } if w, ok := f.Width(); ok { s += fmt.Sprintf("%d", w) } if p, ok := f.Precision(); ok { s += fmt.Sprintf(".%d", p) } s += string(c) formatted := fmt.Sprintf(s, e.x) io.WriteString(f, ReadableEscapeArg(formatted)) }
func (f *formatter) Format(s fmt.State, c rune) { if c != 'v' || (!f.deep && !f.pretty && f.ifaceok && !f.debug) { // default printf newfmt := reconstructFlags(s, c) fmt.Fprintf(s, newfmt, f.v) return } if f.v == nil { writeNilangle(s) return } f.verbose = s.Flag('#') f.extra = s.Flag('+') f.space = s.Flag(' ') f.format(s, c, reflect.ValueOf(f.v)) }
func (st StackTrace) Format(s fmt.State, verb rune) { switch verb { case 'v': switch { case s.Flag('+'): for _, f := range st { fmt.Fprintf(s, "\n%+v", f) } case s.Flag('#'): fmt.Fprintf(s, "%#v", []Frame(st)) default: fmt.Fprintf(s, "%v", []Frame(st)) } case 's': fmt.Fprintf(s, "%s", []Frame(st)) } }
// Format outputs a pretty-printed Bytes. func (t Bytes) Format(out fmt.State, verb rune) { if out.Flag('#') { // use alternate format: base64w s := base64.URLEncoding.EncodeToString([]byte(t)) if verb == 's' && len(string(t)) > ElisionCutoff { fmt.Fprintf(out, "{%s...}", s[:ElisionLength]) } else { fmt.Fprintf(out, "{%s}", s) } } else { // use default format: hex if verb == 's' && len(string(t)) > ElisionCutoff { fmt.Fprintf(out, "[%02x...]", []byte(t)[:ElisionLength]) } else { fmt.Fprintf(out, "[%02x]", []byte(t)) } } }
func defaultFormat(v interface{}, f fmt.State, c rune) { buf := make([]string, 0, 10) buf = append(buf, "%") for i := 0; i < 128; i++ { if f.Flag(i) { buf = append(buf, string(i)) } } if w, ok := f.Width(); ok { buf = append(buf, strconv.Itoa(w)) } if p, ok := f.Precision(); ok { buf = append(buf, "."+strconv.Itoa(p)) } buf = append(buf, string(c)) format := strings.Join(buf, "") fmt.Fprintf(f, format, v) }
// Format satisfies the fmt.Formatter interface. See NewFormatter for usage // details. func (f *formatState) Format(fs fmt.State, verb rune) { f.fs = fs // Use standard formatting for verbs that are not v. if verb != 'v' { format := f.constructOrigFormat(verb) fmt.Fprintf(fs, format, f.value) return } if f.value == nil { if fs.Flag('#') { fs.Write(interfaceBytes) } fs.Write(nilAngleBytes) return } f.format(reflect.ValueOf(f.value)) }
func formatString(fs fmt.State, c rune) string { w, wOk := fs.Width() p, pOk := fs.Precision() var b bytes.Buffer b.WriteByte('%') for _, f := range "+-# 0" { if fs.Flag(int(f)) { b.WriteRune(f) } } if wOk { fmt.Fprint(&b, w) } if pOk { b.WriteByte('.') fmt.Fprint(&b, p) } b.WriteRune(c) return b.String() }