test
@@ -92,9 +92,13 @@ def parse_md_to_html_blocks(md_content):
|
|||||||
mermaid_lines.append(lines[i])
|
mermaid_lines.append(lines[i])
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
# Try to extract title from mermaid content
|
# Try to extract title from mermaid content (YAML format: title: "...")
|
||||||
mermaid_content = '\n'.join(mermaid_lines)
|
mermaid_content = '\n'.join(mermaid_lines)
|
||||||
title_match = re.search(r'title\s+["\']?([^"\'"\n]+)["\']?', mermaid_content)
|
# Match YAML format: title: "Title" or title: 'Title'
|
||||||
|
title_match = re.search(r'title:\s*["\']([^"\']+)["\']', mermaid_content)
|
||||||
|
if not title_match:
|
||||||
|
# Fallback to non-YAML format: title "Title"
|
||||||
|
title_match = re.search(r'title\s+["\']?([^"\'"\n]+)["\']?', mermaid_content)
|
||||||
if title_match:
|
if title_match:
|
||||||
fig_title = title_match.group(1).strip()
|
fig_title = title_match.group(1).strip()
|
||||||
else:
|
else:
|
||||||
@@ -106,12 +110,13 @@ def parse_md_to_html_blocks(md_content):
|
|||||||
|
|
||||||
# Create figure with MsoCaption class and proper Word SEQ field for cross-reference
|
# Create figure with MsoCaption class and proper Word SEQ field for cross-reference
|
||||||
# Format: "Figura X." in bold, title in italic (per UNIR guidelines)
|
# Format: "Figura X." in bold, title in italic (per UNIR guidelines)
|
||||||
bookmark_id = f"_TocFigura{figure_counter}"
|
# Word TOC looks for text with Caption style - anchor must be outside main caption text
|
||||||
html_blocks.append(f'''<p class=MsoCaption style="text-align:center"><a name="{bookmark_id}"><b><span lang=ES style="font-size:12.0pt;line-height:150%">Figura </span></b></a><!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \\* ARABIC <span style='mso-element:field-separator'></span><![endif]--><b><span lang=ES style="font-size:12.0pt;line-height:150%">{figure_counter}</span></b><!--[if supportFields]><span style='mso-element:field-end'></span><![endif]--><b><span lang=ES style="font-size:12.0pt;line-height:150%">.</span></b><span lang=ES style="font-size:12.0pt;line-height:150%"> </span><i><span lang=ES style="font-size:12.0pt;line-height:150%;font-weight:normal">{fig_title}</span></i></p>''')
|
bookmark_id = f"_Ref_Fig{figure_counter}"
|
||||||
|
html_blocks.append(f'''<a name="{bookmark_id}"></a><p class=MsoCaption style="text-align:center"><b><span lang=ES style="font-size:12.0pt;line-height:150%">Figura <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Figura \\* ARABIC <span style='mso-element:field-separator'></span><![endif]-->{figure_counter}<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang=ES style="font-size:12.0pt;line-height:150%"> </span><i><span lang=ES style="font-size:12.0pt;line-height:150%">{fig_title}</span></i></p>''')
|
||||||
|
|
||||||
if os.path.exists(fig_path):
|
if os.path.exists(fig_path):
|
||||||
# Use actual image with proper Word-compatible format (max 350px width, 400px height to fit page with caption)
|
# Use Word-compatible width in cm (A4 text area is ~16cm wide, use ~12cm max)
|
||||||
html_blocks.append(f'''<p class=MsoNormal style="text-align:center"><span lang=ES><img style="max-width:350px;max-height:400px;width:auto;height:auto" src="{fig_file}" alt="{fig_title}"/></span></p>''')
|
html_blocks.append(f'''<p class=MsoNormal style="text-align:center"><span lang=ES><img style="width:12cm;max-width:100%" src="{fig_file}" alt="{fig_title}"/></span></p>''')
|
||||||
else:
|
else:
|
||||||
# Fallback to placeholder
|
# Fallback to placeholder
|
||||||
html_blocks.append(f'''<p class=MsoNormal style="text-align:center;border:1px dashed #999;padding:20px;margin:10px 40px;background:#f9f9f9"><span lang=ES style="color:#666">[Insertar diagrama Mermaid aquí]</span></p>''')
|
html_blocks.append(f'''<p class=MsoNormal style="text-align:center;border:1px dashed #999;padding:20px;margin:10px 40px;background:#f9f9f9"><span lang=ES style="color:#666">[Insertar diagrama Mermaid aquí]</span></p>''')
|
||||||
@@ -189,12 +194,13 @@ def parse_md_to_html_blocks(md_content):
|
|||||||
|
|
||||||
# Add table title with MsoCaption class and proper Word SEQ field for cross-reference
|
# Add table title with MsoCaption class and proper Word SEQ field for cross-reference
|
||||||
# Format: "Tabla X." in bold, title in italic (per UNIR guidelines)
|
# Format: "Tabla X." in bold, title in italic (per UNIR guidelines)
|
||||||
bookmark_id = f"_TocTabla{table_counter}"
|
# Word TOC looks for text with Caption style - anchor must be outside main caption text
|
||||||
|
bookmark_id = f"_Ref_Tab{table_counter}"
|
||||||
if table_title:
|
if table_title:
|
||||||
clean_title = table_title.replace(f"Tabla {table_counter}.", "").strip()
|
clean_title = table_title.replace(f"Tabla {table_counter}.", "").strip()
|
||||||
else:
|
else:
|
||||||
clean_title = "Tabla de datos."
|
clean_title = "Tabla de datos."
|
||||||
html_blocks.append(f'''<p class=MsoCaption><a name="{bookmark_id}"><b><span lang=ES style="font-size:12.0pt;line-height:150%">Tabla </span></b></a><!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Tabla \\* ARABIC <span style='mso-element:field-separator'></span><![endif]--><b><span lang=ES style="font-size:12.0pt;line-height:150%">{table_counter}</span></b><!--[if supportFields]><span style='mso-element:field-end'></span><![endif]--><b><span lang=ES style="font-size:12.0pt;line-height:150%">.</span></b><span lang=ES style="font-size:12.0pt;line-height:150%"> </span><i><span lang=ES style="font-size:12.0pt;line-height:150%;font-weight:normal">{clean_title}</span></i></p>''')
|
html_blocks.append(f'''<a name="{bookmark_id}"></a><p class=MsoCaption><b><span lang=ES style="font-size:12.0pt;line-height:150%">Tabla <!--[if supportFields]><span style='mso-element:field-begin'></span> SEQ Tabla \\* ARABIC <span style='mso-element:field-separator'></span><![endif]-->{table_counter}<!--[if supportFields]><span style='mso-element:field-end'></span><![endif]-->.</span></b><span lang=ES style="font-size:12.0pt;line-height:150%"> </span><i><span lang=ES style="font-size:12.0pt;line-height:150%">{clean_title}</span></i></p>''')
|
||||||
|
|
||||||
# Build table HTML with APA style (horizontal lines only, no vertical)
|
# Build table HTML with APA style (horizontal lines only, no vertical)
|
||||||
table_html = '<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0 style="border-collapse:collapse;border:none">'
|
table_html = '<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0 style="border-collapse:collapse;border:none">'
|
||||||
|
|||||||
@@ -64,10 +64,10 @@ def convert_to_png(diagrams):
|
|||||||
with open(temp_file, 'w', encoding='utf-8') as f:
|
with open(temp_file, 'w', encoding='utf-8') as f:
|
||||||
f.write(diagram['code'])
|
f.write(diagram['code'])
|
||||||
|
|
||||||
# Convert using mmdc with higher resolution for better readability
|
# Convert using mmdc with moderate size for page fit
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
[MMDC, '-i', temp_file, '-o', output_file, '-b', 'white', '-w', '1600', '-s', '2'],
|
[MMDC, '-i', temp_file, '-o', output_file, '-b', 'white', '-w', '800', '-s', '1.5'],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
timeout=60
|
timeout=60
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 48 KiB |