From 762694f6fe56222903d225dc44c3290dc6c47e33 Mon Sep 17 00:00:00 2001
From: Kristina Mazur <kristina.mazur@tum.de>
Date: Tue, 3 Dec 2024 14:25:40 +0100
Subject: [PATCH] Improves the output

---
 scripts/document_aircraft_xml.py | 63 ++++++++++++++------------------
 1 file changed, 28 insertions(+), 35 deletions(-)

diff --git a/scripts/document_aircraft_xml.py b/scripts/document_aircraft_xml.py
index 9b06bdc..453ee3c 100644
--- a/scripts/document_aircraft_xml.py
+++ b/scripts/document_aircraft_xml.py
@@ -51,7 +51,7 @@ from pathlib import Path
 # === Configuration ===
 # Define the format of the output
 FORMAT = {
-    "Header": "# {:s}\n> **Description**: {:s}\n",
+    "Header": "\n## {:s}\n> **Description**: {:s}\n",
     "Unit": "> **Unit**: {:s}\n",
     "TableHeader": "| Relative XML Path | Unit | Description |\n|:---|:---:|:---|",
     "Table": "| <nobr>`{:s}` | *{:s}* | {:s} |",
@@ -92,43 +92,28 @@ class Page:
         self.sections = [[]]
 
     def create(self, node: ET.Element):
-        """Creates the page from the given node.
+        """Creates the page from the given node, summarizing nested elements properly.
 
         Args:
             node (ET.Element): Node to start from.
         """
-        # Only add the header if it was not already added at this level
-        if node.tag in self.sections[self.current_level]:
-            return
-
-        # Check whether the current entry can be a header
+        # Add header if appropriate
         if not self.max_level_reached:
-            self.sections[self.current_level].append(node.tag)
             self.make_header_entry(node)
-            self.current_path = Path(node.tag)
-        else:
-            self.current_path /= node.tag
-
-        # Loop through the children and group single entries in a table
-        for child in node:
-            if len(child) == 0:  # No further nesting
-                self.make_table_entry(child)
-            else:
-                self.create(child)  # Recursively process child nodes
-
-        # Add a new level of sections
-        self.current_level += 1
-        self.sections.append([])
 
-        # Loop again and add the subnodes
-        for child in node:
-            if len(child) > 0:
+        # Treat node attributes and values as part of the parent row
+        if len(node) == 0:  # Leaf node
+            self.make_table_entry(node)
+        else:  # Parent node
+            # Add a summary row for the parent node
+            self.make_table_entry(node)
+
+            # Process child elements recursively, skipping common attributes like 'value', 'unit', etc.
+            for child in node:
+                if child.tag in ["value", "unit", "lower_boundary", "upper_boundary"]:
+                    continue
                 self.create(child)
 
-        # Decrease the level again when finished
-        self.current_level -= 1
-        self.sections.pop()
-        self.current_path = self.current_path.parent
 
     def make_header_entry(self, node: ET.Element):
         """Creates a header entry.
@@ -155,7 +140,7 @@ class Page:
             print(FORMAT["Unit"].format(unit))
 
     def make_table_entry(self, node: ET.Element):
-        """Creates a table entry.
+        """Creates a table entry for the current node, embedding child attributes into the parent node's row.
 
         Args:
             node (ET.Element): The current node element.
@@ -165,17 +150,25 @@ class Page:
             self.table_started = True
             print(FORMAT["TableHeader"])
 
-        # Since we use pathlib for convenience, we need to convert it to a string
-        # and replace the backslashes with forward slashes
+        # Generate a relative XML path for the current node
         path_name = str(self.current_path / node.tag).replace("\\", "/")
 
-        # Fetch description and unit
+        # Fetch parent description and unit
         description = node.attrib.get(KEYS["Description"], f"No description for {node.tag}")
         unit = node.attrib.get(KEYS["Unit"], "No unit specified")
 
+        # Collect all child attributes
+        child_details = []
+        for child in node:
+            child_desc = child.attrib.get(KEYS["Description"], f"No description for {child.tag}")
+            child_unit = child.attrib.get(KEYS["Unit"], "No unit specified")
+            child_details.append(f"{child.tag}: {child_desc} (unit: {child_unit})")
+
+        # Combine parent description with child attributes
+        combined_description = description + " | " + " | ".join(child_details)
 
-        # Create the table row
-        print(FORMAT["Table"].format(path_name, unit, description))
+        # Print the table row for the parent node
+        print(FORMAT["Table"].format(path_name, unit, combined_description))
 
 # === Main ===
 def main():
-- 
GitLab