+ enh: optimized EOL-Mode detection (taken from zufuliu's NP2 commit 2d76e73)

This commit is contained in:
Rainer Kottenhoff 2018-08-17 15:50:58 +02:00
parent 854c413498
commit 48e8e2f3e9
2 changed files with 27 additions and 24 deletions

View File

@ -888,27 +888,30 @@ bool EditCopyAppend(HWND hwnd, bool bAppend)
//
// EditDetectEOLMode() - moved here to handle Unicode files correctly
//
int EditDetectEOLMode(HWND hwnd,char* lpData,DWORD cbData)
int EditDetectEOLMode(HWND hwnd, char* lpData)
{
int iEOLMode = iLineEndings[g_iDefaultEOLMode];
char *cp = (char*)lpData;
if (!cp)
return (iEOLMode);
while (*cp && (*cp != '\x0D' && *cp != '\x0A')) cp++;
if (*cp == '\x0D' && *(cp+1) == '\x0A')
iEOLMode = SC_EOL_CRLF;
else if (*cp == '\x0D' && *(cp+1) != '\x0A')
iEOLMode = SC_EOL_CR;
else if (*cp == '\x0A')
iEOLMode = SC_EOL_LF;
UNUSED(hwnd);
UNUSED(cbData);
int iEOLMode = iLineEndings[g_iDefaultEOLMode];
return (iEOLMode);
LPCSTR cp = lpData ? StrPBrkA(lpData, "\r\n") : NULL;
if (!cp) {
return iEOLMode;
}
if (*cp == '\r') {
if (*(cp + 1) == '\n') {
iEOLMode = SC_EOL_CRLF;
}
else {
iEOLMode = SC_EOL_CR;
}
}
else {
iEOLMode = SC_EOL_LF;
}
return iEOLMode;
}
@ -1125,7 +1128,7 @@ bool EditLoadFile(
EditSetNewText(hwnd,"",0);
FileVars_Init(lpDataUTF8,convCnt - 1,&fvCurFile);
EditSetNewText(hwnd,lpDataUTF8,convCnt - 1);
*iEOLMode = EditDetectEOLMode(hwnd,lpDataUTF8,convCnt - 1);
*iEOLMode = EditDetectEOLMode(hwnd,lpDataUTF8);
FreeMem(lpDataUTF8);
}
else {
@ -1155,12 +1158,12 @@ bool EditLoadFile(
if (IsUTF8Signature(lpData)) {
EditSetNewText(hwnd,UTF8StringStart(lpData),cbData-3);
*iEncoding = CPI_UTF8SIGN;
*iEOLMode = EditDetectEOLMode(hwnd,UTF8StringStart(lpData),cbData-3);
*iEOLMode = EditDetectEOLMode(hwnd,UTF8StringStart(lpData));
}
else {
EditSetNewText(hwnd,lpData,cbData);
*iEncoding = CPI_UTF8;
*iEOLMode = EditDetectEOLMode(hwnd,lpData,cbData);
*iEOLMode = EditDetectEOLMode(hwnd,lpData);
}
FreeMem(lpData);
}
@ -1197,7 +1200,7 @@ bool EditLoadFile(
FreeMem(lpDataWide);
EditSetNewText(hwnd,"",0);
EditSetNewText(hwnd,lpData,cbData);
*iEOLMode = EditDetectEOLMode(hwnd,lpData,cbData);
*iEOLMode = EditDetectEOLMode(hwnd,lpData);
FreeMem(lpData);
}
else {
@ -1220,7 +1223,7 @@ bool EditLoadFile(
*iEncoding = Encoding_IsValid(iForcedEncoding) ? iForcedEncoding : iPreferedEncoding;
EditSetNewText(hwnd,"",0);
EditSetNewText(hwnd,lpData,cbData);
*iEOLMode = EditDetectEOLMode(hwnd,lpData,cbData);
*iEOLMode = EditDetectEOLMode(hwnd,lpData);
FreeMem(lpData);
}
}

View File

@ -32,7 +32,7 @@ bool EditSetClipboardText(HWND, const char*);
bool EditClearClipboard(HWND);
bool EditSwapClipboard(HWND,bool);
bool EditCopyAppend(HWND,bool);
int EditDetectEOLMode(HWND,char*,DWORD);
int EditDetectEOLMode(HWND,char*);
bool EditLoadFile(HWND,LPCWSTR,bool,bool,int*,int*,bool*,bool*,bool*);
bool EditSaveFile(HWND,LPCWSTR,int,bool*,bool);