protected override void Write(MamlRenderer renderer, MathBlock obj) { string formulaText = string.Empty; // obj.Content.Text.Substring(obj.Content.Start, obj.Content.Length); for (int i = 0; i < obj.Lines.Count; ++i) { var l = obj.Lines.Lines[i]; formulaText += l.Slice.Text.Substring(l.Slice.Start, l.Slice.Length); } if (string.IsNullOrEmpty(formulaText)) { return; } var formulaService = Current.GetRequiredService <ILaTeXFormulaImageStreamProvider>(); var(stream, placement, offset, width, height) = formulaService.Parse(formulaText, renderer.BodyTextFontFamily, renderer.BodyTextFontSize, 192, renderer.IsIntendedForHelp1File); if (null == stream) { return; } stream.Seek(0, SeekOrigin.Begin); var streamHash = MemoryStreamImageProxy.ComputeStreamHash(stream); stream.Seek(0, SeekOrigin.Begin); try { renderer.StorePngImageFile(stream, streamHash); stream.Close(); } finally { stream.Dispose(); } // now render to Maml file string localUrl = "../media/" + streamHash + ".png"; var attributes = new Dictionary <string, string> { { "src", localUrl }, { "width", System.Xml.XmlConvert.ToString(width) }, { "height", System.Xml.XmlConvert.ToString(height) } }; renderer.Push(MamlElements.markup); renderer.Push(MamlElements.a, new[] { new KeyValuePair <string, string>("href", renderer.ImageTopicFileGuid + ".htm#" + streamHash) }); renderer.Push(MamlElements.img, attributes); renderer.PopTo(MamlElements.markup); }
protected override void Write(MamlRenderer renderer, MathInline obj) { var formulaText = obj.Content.Text.Substring(obj.Content.Start, obj.Content.Length); if (string.IsNullOrEmpty(formulaText)) { return; } var formulaService = Current.GetRequiredService <ILaTeXFormulaImageStreamProvider>(); var(stream, placement, offset, width, height) = formulaService.Parse(formulaText, renderer.BodyTextFontFamily, renderer.BodyTextFontSize, 192, renderer.IsIntendedForHelp1File); if (null == stream) { return; } stream.Seek(0, SeekOrigin.Begin); var streamHash = MemoryStreamImageProxy.ComputeStreamHash(stream); stream.Seek(0, SeekOrigin.Begin); try { renderer.StorePngImageFile(stream, streamHash); stream.Close(); } finally { stream.Dispose(); } // now render to Maml file string localUrl = "../media/" + streamHash + ".png"; var attributes = new Dictionary <string, string> { { "src", localUrl }, { "width", System.Xml.XmlConvert.ToString(width) }, { "height", System.Xml.XmlConvert.ToString(height) } }; if (renderer.IsIntendedForHelp1File) { attributes.Add("align", placement); } else { attributes.Add("style", string.Format(System.Globalization.CultureInfo.InvariantCulture, "vertical-align:{0}px;", offset)); } renderer.Push(MamlElements.markup); renderer.Push(MamlElements.a, new[] { new KeyValuePair <string, string>("href", renderer.ImageTopicFileGuid + ".htm#" + streamHash) }); renderer.Push(MamlElements.img, attributes); renderer.PopTo(MamlElements.markup); }