decorators take width precedence over bar filler
Vladimir Bauer
3 years ago
| 484 | 484 | return nil, err |
| 485 | 485 | } |
| 486 | 486 | |
| 487 | if !s.trimSpace && stat.AvailableWidth >= 2 { | |
| 488 | err = bufB.WriteByte(' ') | |
| 489 | if err != nil { | |
| 490 | return nil, err | |
| 491 | } | |
| 492 | defer func() { | |
| 493 | if err == nil { | |
| 494 | err = bufB.WriteByte(' ') | |
| 495 | } | |
| 496 | }() | |
| 497 | stat.AvailableWidth -= 2 | |
| 498 | } | |
| 499 | ||
| 500 | 487 | resA, err := decorFiller(bufA, s.aDecorators) |
| 501 | 488 | if err != nil { |
| 502 | 489 | return nil, err |
| 505 | 492 | if resP.truncate { |
| 506 | 493 | trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(bufP.String()), resP.width, "…")) |
| 507 | 494 | bufP.Reset() |
| 508 | bufB.Reset() | |
| 509 | 495 | bufA.Reset() |
| 510 | 496 | return trunc, nil |
| 511 | 497 | } |
| 513 | 499 | if resA.truncate { |
| 514 | 500 | trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(bufA.String()), resA.width, "…")) |
| 515 | 501 | bufA.Reset() |
| 516 | return io.MultiReader(bufP, bufB, trunc), nil | |
| 517 | } | |
| 518 | ||
| 519 | err = s.filler.Fill(bufB, stat) | |
| 520 | if err != nil { | |
| 521 | return nil, err | |
| 502 | return io.MultiReader(bufP, trunc), nil | |
| 503 | } | |
| 504 | ||
| 505 | if !s.trimSpace && stat.AvailableWidth >= 2 { | |
| 506 | stat.AvailableWidth -= 2 | |
| 507 | space := func() error { | |
| 508 | return bufB.WriteByte(' ') | |
| 509 | } | |
| 510 | filler := func() error { | |
| 511 | return s.filler.Fill(bufB, stat) | |
| 512 | } | |
| 513 | for _, fn := range []func() error{space, filler, space} { | |
| 514 | if err := fn(); err != nil { | |
| 515 | return nil, err | |
| 516 | } | |
| 517 | } | |
| 518 | } else { | |
| 519 | err = s.filler.Fill(bufB, stat) | |
| 520 | if err != nil { | |
| 521 | return nil, err | |
| 522 | } | |
| 522 | 523 | } |
| 523 | 524 | |
| 524 | 525 | return io.MultiReader(bufP, bufB, bufA), nil |