From a0da9d1cabf105955ba3cff71ff63664b7d2fc79 Mon Sep 17 00:00:00 2001 From: niksedk Date: Fri, 28 Aug 2015 22:09:19 +0200 Subject: [PATCH] Fix #1194 - problems with italic and bold tags in image export - thx marb99/aaaxx :) --- src/Forms/ExportPngXml.cs | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/Forms/ExportPngXml.cs b/src/Forms/ExportPngXml.cs index bb61f94eb..9963a784c 100644 --- a/src/Forms/ExportPngXml.cs +++ b/src/Forms/ExportPngXml.cs @@ -2098,17 +2098,38 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine + //baseLinePadding = (int)Math.Round(baselineOffsetPixels); var lefts = new List(); - if (text.Contains("", StringComparison.OrdinalIgnoreCase)) + if (text.Contains("", StringComparison.OrdinalIgnoreCase) || text.Contains("", StringComparison.OrdinalIgnoreCase)) { + bool tempItalicOn = false; + bool tempBoldOn = false; foreach (string line in text.SplitToLines()) { - var lineNoHtml = HtmlUtil.RemoveOpenCloseTags(line, HtmlUtil.TagItalic, HtmlUtil.TagFont); + var tempLine = HtmlUtil.RemoveOpenCloseTags(line, HtmlUtil.TagFont); + + if (tempItalicOn) + tempLine = "" + tempLine; + + if (tempBoldOn) + tempLine = "" + tempLine; + + if (tempLine.Contains("") && !tempLine.Contains("")) + tempItalicOn = true; + + if (tempLine.Contains("") && !tempLine.Contains("")) + tempBoldOn = true; + if (parameter.AlignLeft) lefts.Add(5); else if (parameter.AlignRight) - lefts.Add(bmp.Width - CalcWidthViaDraw(lineNoHtml, parameter) - 15); // calculate via drawing+crop + lefts.Add(bmp.Width - CalcWidthViaDraw(tempLine, parameter) - 15); // calculate via drawing+crop else - lefts.Add((float)((bmp.Width - CalcWidthViaDraw(lineNoHtml, parameter) + 5.0) / 2.0)); // calculate via drawing+crop + lefts.Add((float)((bmp.Width - CalcWidthViaDraw(tempLine, parameter) + 5.0) / 2.0)); // calculate via drawing+crop + + if (line.Contains("")) + tempItalicOn = false; + + if (line.Contains("")) + tempBoldOn = false; } } else @@ -2268,7 +2289,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine + if (sb.Length > 0) { lastText.Append(sb); - TextDraw.DrawText(font, sf, path, sb, isItalic, parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); + TextDraw.DrawText(font, sf, path, sb, isItalic, isBold || parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); } if (path.PointCount > 0) { @@ -2352,7 +2373,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine + lastText.Append(sb); - TextDraw.DrawText(font, sf, path, sb, isItalic, parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); + TextDraw.DrawText(font, sf, path, sb, isItalic, isBold || parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); } if (path.PointCount > 0) { @@ -2383,7 +2404,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine + if (sb.Length > 0) { lastText.Append(sb); - TextDraw.DrawText(font, sf, path, sb, isItalic, parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); + TextDraw.DrawText(font, sf, path, sb, isItalic, isBold || parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); } isItalic = true; i += 2; @@ -2398,7 +2419,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine + sb.Append(t); } lastText.Append(sb); - TextDraw.DrawText(font, sf, path, sb, isItalic, parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); + TextDraw.DrawText(font, sf, path, sb, isItalic, isBold || parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); isItalic = false; i += 3; } @@ -2452,7 +2473,7 @@ $DROP=[DROPVALUE]" + Environment.NewLine + Environment.NewLine + } } if (sb.Length > 0) - TextDraw.DrawText(font, sf, path, sb, isItalic, parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); + TextDraw.DrawText(font, sf, path, sb, isItalic, isBold || parameter.SubtitleFontBold, false, left, top, ref newLine, leftMargin, ref newLinePathPoint); DrawShadowAndPath(parameter, g, path); g.FillPath(new SolidBrush(c), path);