| 188 | |
| 189 | |
| 190 | def build_tree_from_nodes(node_list): |
| 191 | if not node_list: |
| 192 | return [] |
| 193 | |
| 194 | stack = [] |
| 195 | root_nodes = [] |
| 196 | node_counter = 1 |
| 197 | |
| 198 | for node in node_list: |
| 199 | current_level = node['level'] |
| 200 | |
| 201 | tree_node = { |
| 202 | 'title': node['title'], |
| 203 | 'node_id': str(node_counter).zfill(4), |
| 204 | 'text': node['text'], |
| 205 | 'line_num': node['line_num'], |
| 206 | 'nodes': [] |
| 207 | } |
| 208 | node_counter += 1 |
| 209 | |
| 210 | while stack and stack[-1][1] >= current_level: |
| 211 | stack.pop() |
| 212 | |
| 213 | if not stack: |
| 214 | root_nodes.append(tree_node) |
| 215 | else: |
| 216 | parent_node, parent_level = stack[-1] |
| 217 | parent_node['nodes'].append(tree_node) |
| 218 | |
| 219 | stack.append((tree_node, current_level)) |
| 220 | |
| 221 | return root_nodes |
| 222 | |
| 223 | |
| 224 | def clean_tree_for_output(tree_nodes): |