private IToken processDelimiter(Delimiter d) { DelimiterProperties dp = d.DelimiterProperties; char beginChar = dp.BeginChar == null ? '(' : dp.BeginChar.Val.ToString().Trim().ElementAt(0); char endChar = dp.EndChar == null ? ')' : dp.EndChar.Val.ToString().Trim().ElementAt(0); var delimiterElements = d.Elements <Base>(); if (delimiterElements.Count() > 1) { char separator = dp.SeparatorChar == null ? '|' : dp.SeparatorChar.Val.ToString().Trim().ElementAt(0); DelimiterToken delimiterToken = new DelimiterToken(beginChar, endChar, separator); foreach (var element in delimiterElements) { var processedElement = processElement(element); delimiterToken.AddElement(processedElement); } return(delimiterToken); } else { var children = from child in delimiterElements.First() select processElement(child); return(new ParenthesesToken(beginChar, endChar, new TokenList(children))); } }
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); }