| 61 | 61 |
averageDecorators []decor.AverageDecorator
|
| 62 | 62 |
ewmaDecorators []decor.EwmaDecorator
|
| 63 | 63 |
shutdownListeners []decor.ShutdownListener
|
| 64 | |
bufP, bufB, bufA *bytes.Buffer
|
|
64 |
buffers [3]*bytes.Buffer
|
| 65 | 65 |
filler BarFiller
|
| 66 | 66 |
middleware func(BarFiller) BarFiller
|
| 67 | 67 |
extender extenderFunc
|
|
| 427 | 427 |
}
|
| 428 | 428 |
|
| 429 | 429 |
func (s *bState) draw(stat decor.Statistics) io.Reader {
|
|
430 |
bufA := s.buffers[0]
|
|
431 |
bufB := s.buffers[1]
|
|
432 |
bufP := s.buffers[2]
|
| 430 | 433 |
nlr := strings.NewReader("\n")
|
| 431 | 434 |
tw := stat.AvailableWidth
|
| 432 | 435 |
for _, d := range s.pDecorators {
|
| 433 | 436 |
str := d.Decor(stat)
|
| 434 | 437 |
stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str))
|
| 435 | |
s.bufP.WriteString(str)
|
|
438 |
bufP.WriteString(str)
|
| 436 | 439 |
}
|
| 437 | 440 |
if stat.AvailableWidth < 1 {
|
| 438 | |
trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufP.String()), tw, "…"))
|
| 439 | |
s.bufP.Reset()
|
|
441 |
trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(bufP.String()), tw, "…"))
|
|
442 |
bufP.Reset()
|
| 440 | 443 |
return io.MultiReader(trunc, nlr)
|
| 441 | 444 |
}
|
| 442 | 445 |
|
| 443 | 446 |
if !s.trimSpace && stat.AvailableWidth > 1 {
|
| 444 | 447 |
stat.AvailableWidth -= 2
|
| 445 | |
s.bufB.WriteByte(' ')
|
| 446 | |
defer s.bufB.WriteByte(' ')
|
|
448 |
bufB.WriteByte(' ')
|
|
449 |
defer bufB.WriteByte(' ')
|
| 447 | 450 |
}
|
| 448 | 451 |
|
| 449 | 452 |
tw = stat.AvailableWidth
|
| 450 | 453 |
for _, d := range s.aDecorators {
|
| 451 | 454 |
str := d.Decor(stat)
|
| 452 | 455 |
stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str))
|
| 453 | |
s.bufA.WriteString(str)
|
|
456 |
bufA.WriteString(str)
|
| 454 | 457 |
}
|
| 455 | 458 |
if stat.AvailableWidth < 1 {
|
| 456 | |
trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufA.String()), tw, "…"))
|
| 457 | |
s.bufA.Reset()
|
| 458 | |
return io.MultiReader(s.bufP, s.bufB, trunc, nlr)
|
| 459 | |
}
|
| 460 | |
|
| 461 | |
s.filler.Fill(s.bufB, s.reqWidth, stat)
|
| 462 | |
|
| 463 | |
return io.MultiReader(s.bufP, s.bufB, s.bufA, nlr)
|
|
459 |
trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(bufA.String()), tw, "…"))
|
|
460 |
bufA.Reset()
|
|
461 |
return io.MultiReader(bufP, bufB, trunc, nlr)
|
|
462 |
}
|
|
463 |
|
|
464 |
s.filler.Fill(bufB, s.reqWidth, stat)
|
|
465 |
|
|
466 |
return io.MultiReader(bufP, bufB, bufA, nlr)
|
| 464 | 467 |
}
|
| 465 | 468 |
|
| 466 | 469 |
func (s *bState) wSyncTable() [][]chan int {
|