protected override WriteResult Write(OpenXMLWpfMathRenderer renderer, AccentedAtom item) { string accentString = string.Empty; if (item.AccentAtom is SymbolAtom symAtom) { if (SymbolAtomRenderer.TryConvert(symAtom.Name, out var text)) { accentString = text; } if (symAtom.Name == "widehat") { accentString = null; } } var accent = new Accent(); renderer.Push(accent); var accentProperties = new AccentProperties(); if (accentString != null) // for widehat, it seems that Word don't even have an accent char (and for widetilde, it is an empty string !) { accentProperties.AppendChild(new AccentChar() { Val = accentString }); } accentProperties.AppendChild( new ControlProperties( new W.RunProperties( new W.RunFonts() { Ascii = "Cambria Math", HighAnsi = "Cambria Math" }, new W.Italic() ) ) ); accent.AppendChild(accentProperties); renderer.Push(new Base()); renderer.Write(item.BaseAtom); renderer.PopTo(accent); return(WriteResult.Completed); }
protected override WriteResult Write(OpenXMLWpfMathRenderer renderer, FencedAtom item) { var delimiter = renderer.Push(new Delimiter()); string leftDelimiterString = "|"; string rightDelimiterString = "|"; if (item.LeftDelimeter is SymbolAtom symLeft) { if (SymbolAtomRenderer.TryConvert(symLeft.Name, out var text)) { leftDelimiterString = text; } } if (item.RightDelimeter is SymbolAtom symRight) { if (SymbolAtomRenderer.TryConvert(symRight.Name, out var text)) { rightDelimiterString = text; } } var delimiterProp = new DelimiterProperties( new BeginChar { Val = leftDelimiterString }, new EndChar { Val = rightDelimiterString }, new ControlProperties( new W.RunProperties( new W.RunFonts() { Ascii = "Cambria Math", HighAnsi = "Cambria Math" }, new W.Italic() ) ) ); delimiter.AppendChild(delimiterProp); var baseEle = renderer.Push(new Base()); renderer.Write(item.BaseAtom); renderer.PopTo(delimiter); return(WriteResult.Completed); }