[Part]Handle CJK font names for ShapeString

This commit is contained in:
wandererfan
2020-02-14 20:35:42 -05:00
committed by WandererFan
parent 66c1bfdd9b
commit e3b5b0b177
2 changed files with 32 additions and 7 deletions

View File

@@ -89,6 +89,9 @@
# include <BRepFill_Filling.hxx>
#endif
#include <cstdio>
#include <fstream>
#include <CXX/Extensions.hxx>
#include <CXX/Objects.hxx>
@@ -1802,7 +1805,19 @@ private:
try {
if (useFontSpec) {
#ifdef FC_OS_WIN32
// Windows doesn't do Utf8 by default and FreeType doesn't do wchar.
// this is a hacky work around.
// copy fontspec to Ascii temp name
std::string tempFile = Base::FileInfo::getTempFileName(); //utf8/ascii
Base::FileInfo fiIn(fontspec);
fiIn.copyTo(tempFile.c_str());
CharList = FT2FC(unichars,pysize,tempFile.c_str(),height,track);
Base::FileInfo fiTemp(tempFile);
fiTemp.deleteFile();
#else
CharList = FT2FC(unichars,pysize,fontspec,height,track);
#endif
}
else {
CharList = FT2FC(unichars,pysize,dir,fontfile,height,track);

View File

@@ -120,13 +120,23 @@ PyObject* FT2FC(const Py_UNICODE *PyUString,
throw std::runtime_error(ErrorMsg.str());
}
// FT does not return an error if font file not found?
std::ifstream is;
is.open (FontSpec);
if (!is) {
ErrorMsg << "Font file not found: " << FontSpec;
throw std::runtime_error(ErrorMsg.str());
}
#ifdef FC_OS_WIN32
Base::FileInfo fi(FontSpec);
if (!fi.isReadable()) {
ErrorMsg << "Font file not found (Win): " << FontSpec;
throw std::runtime_error(ErrorMsg.str());
}
#else
// FT does not return an error if font file not found?
std::ifstream is;
is.open (FontSpec);
if (!is) {
ErrorMsg << "Font file not found: " << FontSpec;
throw std::runtime_error(ErrorMsg.str());
}
#endif
error = FT_New_Face(FTLib,FontSpec,FaceIndex, &FTFont);
if(error) {