bar filler: flush dry
Vladimir Bauer
5 years ago
| 104 | 104 | } |
| 105 | 105 | |
| 106 | 106 | func (s *barStyle) Build() BarFiller { |
| 107 | bf := &bFiller{ | |
| 108 | flush: regFlush, | |
| 109 | } | |
| 107 | bf := new(bFiller) | |
| 110 | 108 | if s.rev { |
| 111 | bf.flush = revFlush | |
| 109 | bf.flush = func(dst io.Writer, filling, padding [][]byte) { | |
| 110 | flush(dst, padding, filling) | |
| 111 | } | |
| 112 | } else { | |
| 113 | bf.flush = flush | |
| 112 | 114 | } |
| 113 | 115 | bf.components[iLbound] = &component{ |
| 114 | 116 | width: runewidth.StringWidth(stripansi.Strip(s.lbound)), |
| 206 | 208 | s.flush(w, filling, padding) |
| 207 | 209 | } |
| 208 | 210 | |
| 209 | func regFlush(dst io.Writer, filling, padding [][]byte) { | |
| 211 | func flush(dst io.Writer, filling, padding [][]byte) { | |
| 210 | 212 | for i := len(filling) - 1; i >= 0; i-- { |
| 211 | 213 | dst.Write(filling[i]) |
| 212 | 214 | } |
| 214 | 216 | dst.Write(padding[i]) |
| 215 | 217 | } |
| 216 | 218 | } |
| 217 | ||
| 218 | func revFlush(dst io.Writer, filling, padding [][]byte) { | |
| 219 | for i := len(padding) - 1; i >= 0; i-- { | |
| 220 | dst.Write(padding[i]) | |
| 221 | } | |
| 222 | for i := 0; i < len(filling); i++ { | |
| 223 | dst.Write(filling[i]) | |
| 224 | } | |
| 225 | } | |