draw wraps drawImpl
Vladimir Bauer
3 years ago
| 450 | 450 | } |
| 451 | 451 | |
| 452 | 452 | func (s *bState) draw(stat decor.Statistics) io.Reader { |
| 453 | return io.MultiReader(s.drawImpl(stat), strings.NewReader("\n")) | |
| 454 | } | |
| 455 | ||
| 456 | func (s *bState) drawImpl(stat decor.Statistics) io.Reader { | |
| 453 | 457 | bufP, bufB, bufA := s.buffers[0], s.buffers[1], s.buffers[2] |
| 454 | nlr := bytes.NewReader([]byte("\n")) | |
| 455 | 458 | tw := stat.AvailableWidth |
| 456 | 459 | for _, d := range s.pDecorators { |
| 457 | 460 | str := d.Decor(stat) |
| 464 | 467 | if stat.AvailableWidth < 1 { |
| 465 | 468 | trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(bufP.String()), tw, "…")) |
| 466 | 469 | bufP.Reset() |
| 467 | return io.MultiReader(trunc, nlr) | |
| 470 | return trunc | |
| 468 | 471 | } |
| 469 | 472 | |
| 470 | 473 | if !s.trimSpace && stat.AvailableWidth > 1 { |
| 485 | 488 | if stat.AvailableWidth < 1 { |
| 486 | 489 | trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(bufA.String()), tw, "…")) |
| 487 | 490 | bufA.Reset() |
| 488 | return io.MultiReader(bufP, bufB, trunc, nlr) | |
| 491 | return io.MultiReader(bufP, bufB, trunc) | |
| 489 | 492 | } |
| 490 | 493 | |
| 491 | 494 | err := s.filler.Fill(bufB, stat) |
| 493 | 496 | panic(err) |
| 494 | 497 | } |
| 495 | 498 | |
| 496 | return io.MultiReader(bufP, bufB, bufA, nlr) | |
| 499 | return io.MultiReader(bufP, bufB, bufA) | |
| 497 | 500 | } |
| 498 | 501 | |
| 499 | 502 | func (s *bState) wSyncTable() [][]chan int { |