Codebase list golang-github-vbauerster-mpb / 48af361
don't let decorators overflow term width Vladimir Bauer 6 years ago
1 changed file(s) with 19 addition(s) and 8 deletion(s). Raw diff Collapse all Expand all
384384 }
385385
386386 func (s *bState) draw(stat decor.Statistics) io.Reader {
387 btrim, tw := 0, stat.AvailableWidth
388 if !s.trimSpace {
389 btrim = 2
390 stat.AvailableWidth -= btrim
391 s.bufB.WriteByte(' ')
392 defer s.bufB.WriteByte(' ')
393 }
394
395 nlr := strings.NewReader("\n")
387396 for _, d := range s.pDecorators {
388397 str := d.Decor(stat)
389398 stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str))
390399 s.bufP.WriteString(str)
391400 }
392
401 if stat.AvailableWidth <= 0 {
402 trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufP.String()), tw-btrim, "…"))
403 return io.MultiReader(trunc, s.bufB, nlr)
404 }
405
406 tw = stat.AvailableWidth
393407 for _, d := range s.aDecorators {
394408 str := d.Decor(stat)
395409 stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str))
396410 s.bufA.WriteString(str)
397411 }
398
399 if !s.trimSpace {
400 defer s.bufB.WriteByte(' ')
401 s.bufB.WriteByte(' ')
402 stat.AvailableWidth -= 2
412 if stat.AvailableWidth <= 0 {
413 trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufA.String()), tw-btrim, "…"))
414 return io.MultiReader(s.bufP, s.bufB, trunc, nlr)
403415 }
404416
405417 s.filler.Fill(s.bufB, s.reqWidth, stat)
406418
407 s.bufA.WriteByte('\n')
408 return io.MultiReader(s.bufP, s.bufB, s.bufA)
419 return io.MultiReader(s.bufP, s.bufB, s.bufA, nlr)
409420 }
410421
411422 func (s *bState) wSyncTable() [][]chan int {