Left-arm spinner Taijul Islam claimed his third straight five-for to keep Bangladesh in command of Zimbabwe on the third day of the second Test on Tuesday.
Islam's 5-107, his sixth career five-for, and a stunning catch ruined Zimbabwe's hope of a comeback. The visitors were all out on 304-9, trailing by 218 runs when stumps was called. Zimbabwe fast bowler Tendai Chatara was out of the Test after straining his left quad muscle on Monday.
Islam was complemented by offspinner Mehidy Hasan, whose three wickets included the prize of Brendan Taylor after the batsman showed rock-solid temperament to cut short Bangladesh's advantage.
Taylor hit a superb 110 off 194 balls, which included 10 boundaries. He shared a 139-run stand with Peter Moor for the sixth wicket. Moor was trapped on 83, and when Taylor was out at 290-7, Zimbabwe's chance of avoiding the follow-on evaporated quickly.
Bangladesh may yet not enforce the follow-on when play resumes on Wednesday.
Zimbabwe began the day on 25-1 and Islam removed nightwatchman Donald Tiripano for 8.
Opener Brian Chari resisted with 53 but Hasan won a video review to remove him just before lunch.
Chari and Brendan Taylor appeared set to keep the side unscathed in a 56-run partnership until Hasan's straight delivery faintly touched Chari's glove.
Islam ripped through Zimbabwe's middle order, with two superb arm deliveries in consecutive overs to dismiss Sean Williams (11) and Sikandar Raza (0).
But Taylor was not fazed by the spinners. He and Moor and kept Bangladesh at bay until the third session.
Part-time medium-pacer Ariful Haque made the breakthrough, from a ball outside off cutting in and Moor missing. Moor scored a career-best 83, hitting 12 fours and one six in an innings lasting 114 balls.
Taylor reached his fifth century, and first in five years, off 187 balls. Then he slogged Hasan only to be caught by Islam diving to his right and making an overhead catch. Two balls later, Hasan also dismissed Brandon Mavuta for a duck.
Islam completed his five-for by getting Regis Chakabva on 10. Kyle Jarvis was 9 not out.