/** * MathML to OMML Converter * * Uses 'mathml2omml' library to convert MathML to Office Math Markup Language (OMML). * This is a pure JavaScript implementation and does not require external XSLT files. */ import { mml2omml } from 'mathml2omml'; /** * Converts MathML string to OMML string using mathml2omml library. * @param mathml The MathML content string * @returns Promise resolving to OMML string */ export async function convertMathmlToOmml(mathml: string): Promise { try { // The library is synchronous, but we keep the async signature for compatibility // and potential future changes (e.g. if we move this to a worker). const omml = mml2omml(mathml); return omml; } catch (error) { console.error('MathML to OMML conversion failed:', error); return ''; } } /** * Wraps OMML in Word XML clipboard format if needed. * This helps Word recognize it when pasting as text. */ export function wrapOmmlForClipboard(omml: string): string { // Replace 2006 namespaces with 2004/2003 namespaces for Word 2003 XML compatibility // This is necessary because the clipboard format uses the older Word XML structure const compatibleOmml = omml .replace(/http:\/\/schemas\.openxmlformats\.org\/officeDocument\/2006\/math/g, 'http://schemas.microsoft.com/office/2004/12/omml') .replace(/http:\/\/schemas\.openxmlformats\.org\/wordprocessingml\/2006\/main/g, 'http://schemas.microsoft.com/office/word/2003/wordml'); // Simple XML declaration wrapper often helps return ` ${compatibleOmml} `; }