Unicode handling:

Removed the Perl dependencies on Encode, Encode::Locale and Unicode::Normalize.
Added dependency on boost::locale.
Added encode_path, decode_path, normalize_utf8 functions to Slic3r.xs

Slic3r.xs has been made mostly utf8 safe by using the boost::nowide library,
thanks to @alexrj for the idea.

Simplified the encode_path / decode_path stuff:
wxWidgets are unicode already, so there is no need to decode_path() from it.
Perl / win32 interfacing is non-unicode, so decode_path() is executed
on ARGV just at the beginning of the perl scripts.
This commit is contained in:
bubnikv 2017-08-03 17:31:31 +02:00
parent 31085fb1d7
commit 1385018724
33 changed files with 236 additions and 186 deletions

View file

@ -3,6 +3,8 @@
#include <string>
#include <expat/expat.h>
#include <boost/nowide/cstdio.hpp>
#include "../libslic3r.h"
#include "../Model.hpp"
#include "AMF.hpp"
@ -480,7 +482,7 @@ bool load_amf(const char *path, Model *model)
return false;
}
FILE *pFile = ::fopen(path, "rt");
FILE *pFile = boost::nowide::fopen(path, "rt");
if (pFile == nullptr) {
printf("Cannot open file %s\n", path);
return false;
@ -522,7 +524,7 @@ bool load_amf(const char *path, Model *model)
bool store_amf(const char *path, Model *model)
{
FILE *file = ::fopen(path, "wb");
FILE *file = boost::nowide::fopen(path, "wb");
if (file == nullptr)
return false;

View file

@ -2,6 +2,8 @@
#include <string.h>
#include <boost/nowide/convert.hpp>
#include <wx/string.h>
#include <wx/wfstream.h>
#include <wx/zipstrm.h>
@ -119,7 +121,14 @@ bool load_prus(const char *path, Model *model)
{
// To receive the content of the zipped 'scene.xml' file.
std::vector<char> scene_xml_data;
wxFFileInputStream in(path);
wxFFileInputStream in(
#ifdef WIN32
// On Windows, convert to a 16bit unicode string.
boost::nowide::widen(path).c_str()
#else
path
#endif
);
wxZipInputStream zip(in);
std::unique_ptr<wxZipEntry> entry;
size_t num_models = 0;

View file

@ -1,6 +1,8 @@
#include <stdlib.h>
#include <string.h>
#include <boost/nowide/cstdio.hpp>
#include "objparser.hpp"
namespace ObjParser {
@ -318,7 +320,7 @@ static bool obj_parseline(const char *line, ObjData &data)
bool objparse(const char *path, ObjData &data)
{
FILE *pFile = ::fopen(path, "rt");
FILE *pFile = boost::nowide::fopen(path, "rt");
if (pFile == 0)
return false;
@ -446,7 +448,7 @@ bool loadvectornameidx(FILE *pFile, std::vector<T> &v)
bool objbinsave(const char *path, const ObjData &data)
{
FILE *pFile = ::fopen(path, "wb");
FILE *pFile = boost::nowide::fopen(path, "wb");
if (pFile == 0)
return false;
@ -471,7 +473,7 @@ bool objbinsave(const char *path, const ObjData &data)
bool objbinload(const char *path, ObjData &data)
{
FILE *pFile = ::fopen(path, "rb");
FILE *pFile = boost::nowide::fopen(path, "rb");
if (pFile == 0)
return false;