Skip to content

fix: move font below style to create correct order for OOXML specs#626

Open
StuCM wants to merge 1 commit intoelapouya:masterfrom
StuCM:fix/rich-text-element-ordering
Open

fix: move font below style to create correct order for OOXML specs#626
StuCM wants to merge 1 commit intoelapouya:masterfrom
StuCM:fix/rich-text-element-ordering

Conversation

@StuCM
Copy link

@StuCM StuCM commented Dec 5, 2025

Description

Problem
The RichText.add() method generates <w:rPr> (run properties) with elements in an order that doesn't comply with the OOXML specification (ECMA-376). Currently, <w:rFonts> is added after <w:b> and <w:i>, but the spec requires <w:rFonts> to come before these formatting elements. This causes Microsoft Word to ignore the font parameter when used together with bold=True or italic=True.

Current behavior
rt = RichText()
rt.add("Hello", bold=True, font="Arial")
print(rt.xml)

Output: <w:rPr><w:b/><w:rFonts .../></w:rPr>

Expected behavior: <w:rPr><w:rFonts .../><w:b/></w:rPr>

OOXML spec reference

The correct order for <w:rPr> child elements per ECMA-376:
rStyle, rFonts, b, bCs, i, iCs, caps, smallCaps, strike, ...

Fix

Move the if font: block to immediately after the if style: block in richtext.py.

Related Issues

#625

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant