Skip to content

fix(docx): honor degHide when rendering radical degrees - #2807

Open
Chen Yufeiyang (feiiiiii5) wants to merge 1 commit into
microsoft:mainfrom
feiiiiii5:fix/docx-deghide-radical
Open

Chen Yufeiyang (feiiiiii5) wants to merge 1 commit into
microsoft:mainfrom
feiiiiii5:fix/docx-deghide-radical

Conversation

@feiiiiii5

Copy link
Copy Markdown

Fixes #2806.

DOCX math: a radical whose degree is hidden (m:radPr/m:degHide) is rendered with the degree anyway. do_rad only checked that the m:deg text was non-empty, and the Pr helper never parsed degHide because radPr children outside tag2meth were skipped.

This adds an on/off property mapping to Pr (an absent m:val or 1/true/on means on; 0/false/off means off) and makes do_rad fall back to the default radical when the degree is hidden. Visible degrees, empty radPr and absent radPr keep their current output.

Tested with parameterized cases for all seven shapes from the issue (hidden val=1/true/absent and visible val=0/false, empty radPr, no radPr):

# parent revision: 3 failed, 4 passed - assert "\sqrt[3]{x}" == "\sqrt{x}"
# this branch:     7 passed
# test_docx.py:   108 passed
# end-to-end: MarkItDown.convert_stream on a synthetic DOCX with degHide emits $\sqrt{x}$
# black --check:  two files unchanged

Not covered: a real Word document round trip (the DOCX is synthesized with python-docx), the wider [all] test matrix (optional dependencies are not installed here), and non-DOCX formats.

do_rad only checked whether the degree text was non-empty, and the Pr helper never parsed the radPr degHide on/off switch, so a hidden degree was still emitted as the radical index. Parse on/off properties in Pr and use the default radical when degHide is on; visible and absent degree properties keep their current output.

Fixes microsoft#2806
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.

DOCX math: degHide is ignored and a hidden radical degree is emitted

1 participant