From 87dec2c4a2691e17100317efbe1c80da7095df96 Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Sat, 11 Oct 2025 18:55:00 +0200 Subject: [PATCH] revised ai core set ready for cross tests --- .../renderers/docx_renderer.py | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/modules/services/serviceGeneration/renderers/docx_renderer.py b/modules/services/serviceGeneration/renderers/docx_renderer.py index 450a1c72..7474b50d 100644 --- a/modules/services/serviceGeneration/renderers/docx_renderer.py +++ b/modules/services/serviceGeneration/renderers/docx_renderer.py @@ -481,12 +481,27 @@ class DocxRenderer(BaseRenderer): self._process_table_row(doc, line) else: - # Regular text - add to current paragraph + # Regular text - finalize any open table first + if hasattr(self, '_current_table') and self._current_table is not None: + self._finalize_current_table(doc) + + # Add to current paragraph current_paragraph.append(line) # Flush any remaining paragraph if current_paragraph: self._add_paragraph_to_doc(doc, '\n'.join(current_paragraph)) + + # Finalize any open table + self._finalize_current_table(doc) + + def _finalize_current_table(self, doc): + """Finalize the current table if one exists.""" + if hasattr(self, '_current_table') and self._current_table is not None: + # Apply final styling to the table + self._style_table(self._current_table) + # Clear the current table reference + self._current_table = None def _add_paragraph_to_doc(self, doc, text: str): """Add a paragraph to the document with proper formatting.""" @@ -513,8 +528,21 @@ class DocxRenderer(BaseRenderer): if not line.strip(): return + # Clean the line - remove bullet point markers and bold markers + clean_line = line.strip() + if clean_line.startswith('- **'): + clean_line = clean_line[4:] # Remove "- **" + elif clean_line.startswith('- '): + clean_line = clean_line[2:] # Remove "- " + elif clean_line.startswith('**'): + clean_line = clean_line[2:] # Remove "**" + + # Remove trailing ** if present + if clean_line.endswith('**'): + clean_line = clean_line[:-2] + # Split by pipe separator - parts = [part.strip() for part in line.split('|')] + parts = [part.strip() for part in clean_line.split('|')] if len(parts) >= 2: # This is a table row - create a table if it doesn't exist @@ -523,15 +551,19 @@ class DocxRenderer(BaseRenderer): self._current_table = doc.add_table(rows=1, cols=len(parts)) self._current_table.style = 'Table Grid' + # Check if this looks like a header row (contains common header words) + is_header = any(word.lower() in clean_line.lower() for word in ['name', 'quantity', 'part', 'number', 'description', 'tag', 'item', 'status']) + # Add header row for i, part in enumerate(parts): if i < len(self._current_table.rows[0].cells): cell = self._current_table.rows[0].cells[i] cell.text = part - # Make header bold - for paragraph in cell.paragraphs: - for run in paragraph.runs: - run.bold = True + # Make header bold if it looks like a header + if is_header: + for paragraph in cell.paragraphs: + for run in paragraph.runs: + run.bold = True else: # Add data row to existing table row = self._current_table.add_row()