コード例 #1
0
ファイル: MathBlockRenderer.cs プロジェクト: olesar/Altaxo
        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);
        }
コード例 #2
0
ファイル: MathInlineRenderer.cs プロジェクト: olesar/Altaxo
        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);
        }