From b86e1adb22c98cc89ced66032e237314f13411da Mon Sep 17 00:00:00 2001 From: Syres916 <46537884+Syres916@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:32:56 +0000 Subject: [PATCH] [Techdraw] Import SVG files with UTF-8 encoding (#18816) * [Techdraw] Fix importing SVG files with UTF-8 encoding * [Techdraw] fix Lint feedback --- src/Mod/TechDraw/CMakeLists.txt | 1 + src/Mod/TechDraw/Gui/Command.cpp | 24 +++++++++++++------ src/Mod/TechDraw/TDTest/DrawViewSymbolTest.py | 23 +++++++++++++++++- .../TechDraw/TDTest/TestNonAsciiSymbol.svg | 23 ++++++++++++++++++ 4 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 src/Mod/TechDraw/TDTest/TestNonAsciiSymbol.svg diff --git a/src/Mod/TechDraw/CMakeLists.txt b/src/Mod/TechDraw/CMakeLists.txt index 280fabc523..5279e5fc7a 100644 --- a/src/Mod/TechDraw/CMakeLists.txt +++ b/src/Mod/TechDraw/CMakeLists.txt @@ -193,6 +193,7 @@ SET(TDTestFile_SRCS TDTest/TestHatch.svg TDTest/TestImage.png TDTest/TestSymbol.svg + TDTest/TestNonAsciiSymbol.svg TDTest/TestTemplate.svg ) diff --git a/src/Mod/TechDraw/Gui/Command.cpp b/src/Mod/TechDraw/Gui/Command.cpp index 87f33de1ef..3d4bd35ebf 100644 --- a/src/Mod/TechDraw/Gui/Command.cpp +++ b/src/Mod/TechDraw/Gui/Command.cpp @@ -456,16 +456,25 @@ void CmdTechDrawView::activated(int iMsg) filename = Base::Tools::escapeEncodeFilename(filename); auto filespec = DU::cleanFilespecBackslash(filename.toStdString()); openCommand(QT_TRANSLATE_NOOP("Command", "Create Symbol")); - doCommand(Doc, "f = open(\"%s\", 'r')", filespec.c_str()); + doCommand(Doc, "import codecs"); + doCommand(Doc, + "f = codecs.open(\"%s\", 'r', encoding=\"utf-8\")", + filespec.c_str()); doCommand(Doc, "svg = f.read()"); doCommand(Doc, "f.close()"); - doCommand(Doc, "App.activeDocument().addObject('TechDraw::DrawViewSymbol', '%s')", + doCommand(Doc, + "App.activeDocument().addObject('TechDraw::DrawViewSymbol', '%s')", + FeatName.c_str()); + doCommand( + Doc, + "App.activeDocument().%s.translateLabel('DrawViewSymbol', 'Symbol', '%s')", + FeatName.c_str(), FeatName.c_str()); - doCommand(Doc, "App.activeDocument().%s.translateLabel('DrawViewSymbol', 'Symbol', '%s')", - FeatName.c_str(), FeatName.c_str()); doCommand(Doc, "App.activeDocument().%s.Symbol = svg", FeatName.c_str()); - doCommand(Doc, "App.activeDocument().%s.addView(App.activeDocument().%s)", PageName.c_str(), - FeatName.c_str()); + doCommand(Doc, + "App.activeDocument().%s.addView(App.activeDocument().%s)", + PageName.c_str(), + FeatName.c_str()); } else { std::string FeatName = getUniqueObjectName("Image"); @@ -1551,7 +1560,8 @@ void CmdTechDrawSymbol::activated(int iMsg) filename = Base::Tools::escapeEncodeFilename(filename); auto filespec = DU::cleanFilespecBackslash(filename.toStdString()); openCommand(QT_TRANSLATE_NOOP("Command", "Create Symbol")); - doCommand(Doc, "f = open(\"%s\", 'r')", (const char*)filespec.c_str()); + doCommand(Doc, "import codecs"); + doCommand(Doc, "f = codecs.open(\"%s\", 'r', encoding=\"utf-8\")", filespec.c_str()); doCommand(Doc, "svg = f.read()"); doCommand(Doc, "f.close()"); doCommand(Doc, "App.activeDocument().addObject('TechDraw::DrawViewSymbol', '%s')", diff --git a/src/Mod/TechDraw/TDTest/DrawViewSymbolTest.py b/src/Mod/TechDraw/TDTest/DrawViewSymbolTest.py index c5590bd43a..05a1e924d6 100644 --- a/src/Mod/TechDraw/TDTest/DrawViewSymbolTest.py +++ b/src/Mod/TechDraw/TDTest/DrawViewSymbolTest.py @@ -1,5 +1,6 @@ import FreeCAD +import codecs import os import unittest from .TechDrawTestUtilities import createPageWithSVGTemplate @@ -21,7 +22,26 @@ class DrawViewSymbolTest(unittest.TestCase): sym = FreeCAD.ActiveDocument.addObject("TechDraw::DrawViewSymbol", "TestSymbol") path = os.path.dirname(os.path.abspath(__file__)) symbolFileSpec = path + "/TestSymbol.svg" - f = open(symbolFileSpec, "r") + f = codecs.open(symbolFileSpec, "r", encoding="utf-8") + svg = f.read() + f.close() + sym.Symbol = svg + self.page.addView(sym) + sym.X = 220.0 + sym.Y = 150.0 + + FreeCAD.ActiveDocument.recompute() + + self.assertTrue("Up-to-date" in sym.State) + + def testNonAsciiSymbol(self): + """Tests if a Non-Ascii symbol can be added to page""" + sym = FreeCAD.ActiveDocument.addObject( + "TechDraw::DrawViewSymbol", "NonAsciiSymbol" + ) + path = os.path.dirname(os.path.abspath(__file__)) + symbolFileSpec = path + "/TestNonAsciiSymbol.svg" + f = codecs.open(symbolFileSpec, "r", encoding="utf-8") svg = f.read() f.close() sym.Symbol = svg @@ -34,5 +54,6 @@ class DrawViewSymbolTest(unittest.TestCase): self.assertTrue("Up-to-date" in sym.State) + if __name__ == "__main__": unittest.main() diff --git a/src/Mod/TechDraw/TDTest/TestNonAsciiSymbol.svg b/src/Mod/TechDraw/TDTest/TestNonAsciiSymbol.svg new file mode 100644 index 0000000000..5c1105ceb0 --- /dev/null +++ b/src/Mod/TechDraw/TDTest/TestNonAsciiSymbol.svg @@ -0,0 +1,23 @@ + + + + + + + + + ⌀ 0,01 + + Ä + + Ö + + Ü + +