| 191 | return self.__next(self.node, tuple()) |
| 192 | |
| 193 | def __next( |
| 194 | self, |
| 195 | node: DataTree, |
| 196 | continues: tuple[bool, ...], |
| 197 | level: int = 0, |
| 198 | ) -> Iterator[Row]: |
| 199 | yield RenderDataTree.__item(node, continues, self.style) |
| 200 | children = node.children.values() |
| 201 | level += 1 |
| 202 | if children and (self.maxlevel is None or level < self.maxlevel): |
| 203 | nchildren = len(children) |
| 204 | children = self.childiter(children) |
| 205 | for i, (child, is_last) in enumerate(_is_last(children)): |
| 206 | if ( |
| 207 | self.maxchildren is None |
| 208 | or i < ceil(self.maxchildren / 2) |
| 209 | or i >= ceil(nchildren - self.maxchildren / 2) |
| 210 | ): |
| 211 | yield from self.__next( |
| 212 | child, |
| 213 | continues + (not is_last,), |
| 214 | level=level, |
| 215 | ) |
| 216 | if ( |
| 217 | self.maxchildren is not None |
| 218 | and nchildren > self.maxchildren |
| 219 | and i == ceil(self.maxchildren / 2) |
| 220 | ): |
| 221 | yield RenderDataTree.__item("...", continues, self.style) |
| 222 | |
| 223 | @staticmethod |
| 224 | def __item( |