Пример #1
0
        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);
        }
Пример #2
0
        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);
        }