fix: move font below style to create correct order for OOXML specs #626
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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