feat: parse equations into a tree that renders the MathML OneNote exports
An equation is stored as linear text where U+FDD0 opens an inline object,
U+FDEE separates its arguments and U+FDEF closes it, with the object's kind
(the text object model's OBJECTTYPE: 31 superscript, 16 fraction, …),
argument count and building symbols on the text-run data of the opening
character. The reader now carries that data on each run's format as
Format::math_object, and page::Math parses a paragraph into a tree of
identifiers, numbers, operators and objects and renders it as MathML in the
form OneNote's own export uses (mml: prefix, one mi per letter, math-italic
Latin letters plain, other alphabets as stored, single-node arguments bare
and multi-node ones in mrow).
corpus/m6/native-math-01 is the oracle: its three equation-editor
expressions render byte for byte to the MathML the COM read exported
(superscripts, a fraction and inline Greek). Subscripts, radicals, limits
and brackets follow the OBJECTTYPE meaning without a native check yet.
Assisted-by: claude-fable-5.1
db49720208clover caruso committed on 9/26/2026, 3:26:20 AMparent237d466