def _ctab(stream):
    """Process ``Ctab``.
    
    :param stream: Queue containing lines of text.
    :type stream: :py:class:`collections.deque`
    :return: Tuples of data.
    """
    yield CtabBlockStart()
    counts_line = stream.popleft()
    counts_line_values = [counts_line[i:i + 3].strip() for i in range(0, len(counts_line) - 6, 3)] + \
                         [counts_line[-6:len(counts_line)].strip()]
    ctab_counts_line = CtabCountsLine(*counts_line_values)
    yield ctab_counts_line

    number_of_atoms = ctab_counts_line.number_of_atoms
    number_of_bonds = ctab_counts_line.number_of_bonds

    # yield from _ctab_atom_bond_block(number_of_lines=number_of_atoms, block_type=CtabAtomBlockLine, stream=stream)
    for token in _ctab_atom_bond_block(number_of_lines=number_of_atoms, block_type=CtabAtomBlockLine, stream=stream):
        yield token

    # yield from _ctab_atom_bond_block(number_of_lines=number_of_bonds, block_type=CtabBondBlockLine, stream=stream)
    for token in _ctab_atom_bond_block(number_of_lines=number_of_bonds, block_type=CtabBondBlockLine, stream=stream):
        yield token

    # yield from _ctab_property_block(stream=stream)
    for token in _ctab_property_block(stream=stream):
        yield token

    yield CtabBlockEnd()