diff --git a/PowerEditor/src/EncodingMapper.cpp b/PowerEditor/src/EncodingMapper.cpp index 3e696863c..65a22b587 100644 --- a/PowerEditor/src/EncodingMapper.cpp +++ b/PowerEditor/src/EncodingMapper.cpp @@ -17,6 +17,7 @@ #include "precompiledHeaders.h" #include "EncodingMapper.h" +#include "Scintilla.h" // Don't change the order EncodingUnit encodings[] = { @@ -129,7 +130,7 @@ int EncodingMapper::getIndexFromEncoding(int encoding) const int EncodingMapper::getEncodingFromString(const char *encodingAlias) const { if (isInListA(encodingAlias, "utf-8 utf8")) - return 65001; + return SC_CP_UTF8; size_t nbItem = sizeof(encodings)/sizeof(EncodingUnit); int enc = -1; diff --git a/PowerEditor/src/MISC/Process/ProcessAvecThread/Process.cpp b/PowerEditor/src/MISC/Process/ProcessAvecThread/Process.cpp index 9141287e5..07c57559a 100644 --- a/PowerEditor/src/MISC/Process/ProcessAvecThread/Process.cpp +++ b/PowerEditor/src/MISC/Process/ProcessAvecThread/Process.cpp @@ -15,8 +15,9 @@ //along with this program; if not, write to the Free Software //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#include "precompiledHeaders.h" #include "process.h" -#include "SysMsg.h" +//#include "SysMsg.h" BOOL Process::run() { @@ -38,11 +39,11 @@ BOOL Process::run() try { // Create stdout pipe if (!::CreatePipe(&_hPipeOutR, &hPipeOutW, &sa, 0)) - error("CreatePipe", result, 1000); + error(TEXT("CreatePipe"), result, 1000); // Create stderr pipe if (!::CreatePipe(&_hPipeErrR, &hPipeErrW, &sa, 0)) - error("CreatePipe", result, 1001); + error(TEXT("CreatePipe"), result, 1001); STARTUPINFO startup; PROCESS_INFORMATION procinfo; @@ -69,27 +70,27 @@ BOOL Process::run() _hProcessThread = procinfo.hThread; if(!started) - error("CreateProcess", result, 1002); + error(TEXT("CreateProcess"), result, 1002); - hListenerEvent[0] = ::CreateEvent(NULL, FALSE, FALSE, "listenerEvent"); + hListenerEvent[0] = ::CreateEvent(NULL, FALSE, FALSE, TEXT("listenerEvent")); if(!hListenerEvent[0]) - error("CreateEvent", result, 1003); + error(TEXT("CreateEvent"), result, 1003); - hListenerEvent[1] = ::CreateEvent(NULL, FALSE, FALSE, "listenerStdErrEvent"); + hListenerEvent[1] = ::CreateEvent(NULL, FALSE, FALSE, TEXT("listenerStdErrEvent")); if(!hListenerEvent[1]) - error("CreateEvent", result, 1004); + error(TEXT("CreateEvent"), result, 1004); hListenerStdOutThread = ::CreateThread(NULL, 0, staticListenerStdOut, this, 0, NULL); if (!hListenerStdOutThread) - error("CreateThread", result, 1005); + error(TEXT("CreateThread"), result, 1005); hListenerStdErrThread = ::CreateThread(NULL, 0, staticListenerStdErr, this, 0, NULL); if (!hListenerStdErrThread) - error("CreateThread", result, 1006); + error(TEXT("CreateThread"), result, 1006); ::WaitForSingleObject(_hProcess, INFINITE); ::WaitForMultipleObjects(2, hListenerEvent, TRUE, INFINITE); - } catch (int coderr){} + } catch (int /*coderr*/){} // on va fermer toutes les handles if (hPipeOutW) @@ -117,11 +118,11 @@ BOOL Process::run() void Process::listenerStdOut() { - BOOL Result = 0; - DWORD size = 0; + //BOOL Result = 0; + //DWORD size = 0; DWORD bytesAvail = 0; BOOL result = 0; - HANDLE hListenerEvent = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, "listenerEvent"); + HANDLE hListenerEvent = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, TEXT("listenerEvent")); //FILE *fp = NULL; int taille = 0; @@ -134,7 +135,8 @@ void Process::listenerStdOut() ::ResumeThread(_hProcessThread); - while (true) + bool goOn = true; + while (goOn) { // got data memset(bufferOut,0x00,MAX_LINE_LENGTH + 1); //memset(bufferErr,0x00,MAX_LINE_LENGTH + 1); @@ -145,6 +147,7 @@ void Process::listenerStdOut() if (!::PeekNamedPipe(_hPipeOutR, bufferOut, taille, &outbytesRead, &bytesAvail, NULL)) { bytesAvail = 0; + goOn = false; break; } @@ -152,18 +155,24 @@ void Process::listenerStdOut() { result = :: ReadFile(_hPipeOutR, bufferOut, taille, &outbytesRead, NULL); if ((!result) && (outbytesRead == 0)) + { + goOn = false; break; + } } //outbytesRead = strlen(bufferOut); bufferOut[outbytesRead] = '\0'; - string s; + generic_string s; s.assign(bufferOut); _stdoutStr += s; if (::GetExitCodeProcess(_hProcess, (unsigned long*)&nExitCode)) { if (nExitCode != STILL_ACTIVE) + { + goOn = false; break; // EOF condition + } } //else //break; @@ -172,17 +181,17 @@ void Process::listenerStdOut() if(!::SetEvent(hListenerEvent)) { - systemMessage("Thread listenerStdOut"); + systemMessage(TEXT("Thread listenerStdOut")); } } void Process::listenerStdErr() { - BOOL Result = 0; - DWORD size = 0; + //BOOL Result = 0; + //DWORD size = 0; DWORD bytesAvail = 0; BOOL result = 0; - HANDLE hListenerEvent = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, "listenerStdErrEvent"); + HANDLE hListenerEvent = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, TEXT("listenerStdErrEvent")); int taille = 0; //TCHAR bufferOut[MAX_LINE_LENGTH + 1]; @@ -194,7 +203,8 @@ void Process::listenerStdErr() ::ResumeThread(_hProcessThread); - while (true) + bool goOn = true; + while (goOn) { // got data memset(bufferErr, 0x00, MAX_LINE_LENGTH + 1); taille = sizeof(bufferErr) - sizeof(TCHAR); @@ -204,6 +214,7 @@ void Process::listenerStdErr() if (!::PeekNamedPipe(_hPipeErrR, bufferErr, taille, &errbytesRead, &bytesAvail, NULL)) { bytesAvail = 0; + goOn = false; break; } @@ -211,18 +222,24 @@ void Process::listenerStdErr() { result = :: ReadFile(_hPipeErrR, bufferErr, taille, &errbytesRead, NULL); if ((!result) && (errbytesRead == 0)) + { + goOn = false; break; + } } //outbytesRead = strlen(bufferOut); bufferErr[errbytesRead] = '\0'; - string s; + generic_string s; s.assign(bufferErr); _stderrStr += s; if (::GetExitCodeProcess(_hProcess, (unsigned long*)&nExitCode)) { if (nExitCode != STILL_ACTIVE) + { + goOn = false; break; // EOF condition + } } //else //break; @@ -231,11 +248,11 @@ void Process::listenerStdErr() if(!::SetEvent(hListenerEvent)) { - systemMessage("Thread stdout listener"); + systemMessage(TEXT("Thread stdout listener")); } } -void Process::error(const char *txt2display, BOOL & returnCode, int errCode) +void Process::error(const TCHAR *txt2display, BOOL & returnCode, int errCode) { systemMessage(txt2display); returnCode = FALSE; diff --git a/PowerEditor/src/MISC/Process/ProcessAvecThread/Process.h b/PowerEditor/src/MISC/Process/ProcessAvecThread/Process.h index 3da6e62e9..f9b4fec9e 100644 --- a/PowerEditor/src/MISC/Process/ProcessAvecThread/Process.h +++ b/PowerEditor/src/MISC/Process/ProcessAvecThread/Process.h @@ -19,29 +19,28 @@ #define PROCESSUS_H #include -#include +//#include using namespace std; class Process { public: Process() {}; - Process(const char *cmd, const char *cDir/*, unsigned int id = 0*/) - : _stdoutStr(""), _stderrStr(""), _hPipeOutR(NULL), + Process(const TCHAR *cmd, const TCHAR *cDir) + : _stdoutStr(TEXT("")), _stderrStr(TEXT("")), _hPipeOutR(NULL), _hPipeErrR(NULL), _hProcess(NULL), _hProcessThread(NULL) { - strcpy(_command, cmd); - strcpy(_curDir, cDir); - //_pid = id; + lstrcpy(_command, cmd); + lstrcpy(_curDir, cDir); }; BOOL run(); - const char * getStdout() const { + const TCHAR * getStdout() const { return _stdoutStr.c_str(); }; - const char * getStderr() const { + const TCHAR * getStderr() const { return _stderrStr.c_str(); }; @@ -50,21 +49,21 @@ public: }; bool hasStdout() { - return _stdoutStr.compare(""); + return (_stdoutStr.compare(TEXT("")) != 0); }; bool hasStderr() { - return _stderrStr.compare(""); + return (_stderrStr.compare(TEXT("")) != 0); }; protected: // LES ENTREES - char _command[256]; - char _curDir[256]; + TCHAR _command[256]; + TCHAR _curDir[256]; // LES SORTIES - string _stdoutStr; - string _stderrStr; + generic_string _stdoutStr; + generic_string _stderrStr; int _exitCode; // LES HANDLES @@ -85,7 +84,7 @@ protected: }; void listenerStdOut(); void listenerStdErr(); - void error(const char *txt2display, BOOL & returnCode, int errCode); + void error(const TCHAR *txt2display, BOOL & returnCode, int errCode); }; #endif //PROCESSUS_H diff --git a/PowerEditor/src/MISC/Process/ProcessAvecThread/ProcessThread.h b/PowerEditor/src/MISC/Process/ProcessAvecThread/ProcessThread.h index c2abfc26f..719427cc5 100644 --- a/PowerEditor/src/MISC/Process/ProcessAvecThread/ProcessThread.h +++ b/PowerEditor/src/MISC/Process/ProcessAvecThread/ProcessThread.h @@ -23,14 +23,14 @@ class ProcessThread { public : - ProcessThread(const char *appName, const char *cmd, const char *cDir, HWND hwnd) : _hwnd(hwnd) { - strcpy(_appName, appName); - strcpy(_command, cmd); - strcpy(_curDir, cDir); + ProcessThread(const TCHAR *appName, const TCHAR *cmd, const TCHAR *cDir, HWND hwnd) : _hwnd(hwnd) { + lstrcpy(_appName, appName); + lstrcpy(_command, cmd); + lstrcpy(_curDir, cDir); }; BOOL run(){ - HANDLE hEvent = ::CreateEvent(NULL, FALSE, FALSE, "localVarProcessEvent"); + HANDLE hEvent = ::CreateEvent(NULL, FALSE, FALSE, TEXT("localVarProcessEvent")); _hProcessThread = ::CreateThread(NULL, 0, staticLauncher, this, 0, NULL); @@ -42,9 +42,9 @@ public : protected : // ENTREES - char _appName[256]; - char _command[256]; - char _curDir[256]; + TCHAR _appName[256]; + TCHAR _command[256]; + TCHAR _curDir[256]; HWND _hwnd; HANDLE _hProcessThread; @@ -54,28 +54,28 @@ protected : }; bool launch() { - HANDLE hEvent = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, "localVarProcessEvent"); + HANDLE hEvent = ::OpenEvent(EVENT_ALL_ACCESS, FALSE, TEXT("localVarProcessEvent")); HWND hwnd = _hwnd; - char appName[256]; - strcpy(appName, _appName); + TCHAR appName[256]; + lstrcpy(appName, _appName); HANDLE hMyself = _hProcessThread; Process process(_command, _curDir); if(!::SetEvent(hEvent)) { - systemMessage("Thread launcher"); + systemMessage(TEXT("Thread launcher")); } process.run(); int code = process.getExitCode(); - char codeStr[256]; - sprintf(codeStr, "%s : %0.4X", appName, code); - ::MessageBox(hwnd, (char *)process.getStdout(), codeStr, MB_OK); + TCHAR codeStr[256]; + generic_sprintf(codeStr, TEXT("%s : %0.4X"), appName, code); + ::MessageBox(hwnd, process.getStdout(), codeStr, MB_OK); if (process.hasStderr()) - ::MessageBox(hwnd, (char *)process.getStderr(), codeStr, MB_OK); + ::MessageBox(hwnd, process.getStderr(), codeStr, MB_OK); ::CloseHandle(hMyself); return true; diff --git a/PowerEditor/src/ScitillaComponent/Buffer.cpp b/PowerEditor/src/ScitillaComponent/Buffer.cpp index 7bbbf2bfa..4f079a3a4 100644 --- a/PowerEditor/src/ScitillaComponent/Buffer.cpp +++ b/PowerEditor/src/ScitillaComponent/Buffer.cpp @@ -429,11 +429,12 @@ BufferID FileManager::loadFile(const TCHAR * filename, Document doc, int encodin } buf->setUnicodeMode(um); } - else + else // encoding != -1 { - buf->setUnicodeMode(uniCookie); + // Test if encoding is set to UTF8 w/o BOM (usually for utf8 indicator of xml or html) + buf->setEncoding((encoding == SC_CP_UTF8)?-1:encoding); + buf->setUnicodeMode(uniCookie); buf->setFormat(format); - buf->setEncoding(encoding); } //determine buffer properties _nextBufferID++;