From 07fc127eabbd8ed1b0edca4a0cfca713807d10d4 Mon Sep 17 00:00:00 2001 From: g3candy Date: Fri, 10 Jul 2015 17:26:55 +0100 Subject: [PATCH 1/2] empty files line endings when a user creates a new file, uses user preferences however when opening an empty file where notepad++ can't detect the line endings, it uses windows line endings I've proposed a coupe of changes. First noticing that on construction Buffer::_format is set to the users eol preference, theres no need for a default fallback to be set. 1) FileManager::loadFileData sets *pFormat to -1 when it can't detect a line ending (empty file) 2) FileManager::loadFile and FileManager::ReloadBuffer only set the line ending of the buffer when format!=-1, thus uses the users preference --- PowerEditor/src/ScitillaComponent/Buffer.cpp | 26 +++++++++----------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/PowerEditor/src/ScitillaComponent/Buffer.cpp b/PowerEditor/src/ScitillaComponent/Buffer.cpp index f7e51f9a1..6fd0d639b 100644 --- a/PowerEditor/src/ScitillaComponent/Buffer.cpp +++ b/PowerEditor/src/ScitillaComponent/Buffer.cpp @@ -510,13 +510,11 @@ BufferID FileManager::loadFile(const TCHAR * filename, Document doc, int encodin if (nullptr != UnicodeConvertor.getNewBuf()) { int format = getEOLFormatForm(UnicodeConvertor.getNewBuf(), UnicodeConvertor.getNewSize()); - buf->setFormat(format == -1?WIN_FORMAT:(formatType)format); - } - else - { - buf->setFormat(WIN_FORMAT); + if( format != -1 ) + buf->setFormat((formatType)format); } + UniMode um = UnicodeConvertor.getEncoding(); if (um == uni7Bit) { @@ -536,7 +534,8 @@ BufferID FileManager::loadFile(const TCHAR * filename, Document doc, int encodin // 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); + if ( format != -1 ) + buf->setFormat(format); } //determine buffer properties @@ -569,18 +568,17 @@ bool FileManager::reloadBuffer(BufferID id) if (nullptr != UnicodeConvertor.getNewBuf()) { int format = getEOLFormatForm(UnicodeConvertor.getNewBuf(), UnicodeConvertor.getNewSize()); - buf->setFormat(format == -1?WIN_FORMAT:(formatType)format); - } - else - { - buf->setFormat(WIN_FORMAT); + if( format != -1 ) + buf->setFormat((formatType)format); } + buf->setUnicodeMode(UnicodeConvertor.getEncoding()); } else { buf->setEncoding(encoding); - buf->setFormat(format); + if ( format != - 1) + buf->setFormat(format); buf->setUnicodeMode(uniCookie); } } @@ -1264,7 +1262,7 @@ inline bool FileManager::loadFileData(Document doc, const TCHAR * filename, char if (pFormat != NULL) { - *pFormat = (format == -1)?WIN_FORMAT:(formatType)format; + *pFormat = (formatType)format; } _pscratchTilla->execute(SCI_EMPTYUNDOBUFFER); _pscratchTilla->execute(SCI_SETSAVEPOINT); @@ -1344,4 +1342,4 @@ int FileManager::getEOLFormatForm(const char* const data, size_t length) const } } return -1; -} \ No newline at end of file +} From 751069ab836690ac00dae82ced4e82e3fdb03b9a Mon Sep 17 00:00:00 2001 From: gerr Date: Thu, 22 Oct 2015 15:52:25 +0100 Subject: [PATCH 2/2] changed the semantics for fallback line endings. When the file format (line endings), can't be deduced (empty files, files without any newlines), then the buffer uses the setting for the Newdocument --- PowerEditor/src/ScitillaComponent/Buffer.cpp | 26 +++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/PowerEditor/src/ScitillaComponent/Buffer.cpp b/PowerEditor/src/ScitillaComponent/Buffer.cpp index 9a0e61fb1..a7c8de070 100644 --- a/PowerEditor/src/ScitillaComponent/Buffer.cpp +++ b/PowerEditor/src/ScitillaComponent/Buffer.cpp @@ -630,11 +630,11 @@ BufferID FileManager::loadFile(const TCHAR * filename, Document doc, int encodin // 3 formats : WIN_FORMAT, UNIX_FORMAT and MAC_FORMAT if (nullptr != UnicodeConvertor.getNewBuf()) { - FormatType format = getEOLFormatForm(UnicodeConvertor.getNewBuf(), UnicodeConvertor.getNewSize()); + FormatType format = getEOLFormatForm(UnicodeConvertor.getNewBuf(), UnicodeConvertor.getNewSize(),ndds._format); buf->setFormat(format); } else - buf->setFormat(FormatType::osdefault); + buf->setFormat(ndds._format); UniMode um = UnicodeConvertor.getEncoding(); if (um == uni7Bit) @@ -681,13 +681,17 @@ bool FileManager::reloadBuffer(BufferID id) { if (encoding == -1) { + NppParameters *pNppParamInst = NppParameters::getInstance(); + const NewDocDefaultSettings & ndds = (pNppParamInst->getNppGUI()).getNewDocDefaultSettings(); // for ndds._format + if (nullptr != UnicodeConvertor.getNewBuf()) { - FormatType format = getEOLFormatForm(UnicodeConvertor.getNewBuf(), UnicodeConvertor.getNewSize()); + FormatType format = getEOLFormatForm(UnicodeConvertor.getNewBuf(), UnicodeConvertor.getNewSize(),ndds._format); buf->setFormat(format); } - else - buf->setFormat(FormatType::osdefault); + else{ + buf->setFormat(ndds._format); + } buf->setUnicodeMode(UnicodeConvertor.getEncoding()); } @@ -1464,7 +1468,17 @@ inline bool FileManager::loadFileData(Document doc, const TCHAR * filename, char // broadcast the format if (pFormat != nullptr) - *pFormat = (format != FormatType::unknown) ? format : FormatType::osdefault; + { + if (format == FormatType::unknown){ + NppParameters *pNppParamInst = NppParameters::getInstance(); + const NewDocDefaultSettings & ndds = (pNppParamInst->getNppGUI()).getNewDocDefaultSettings(); // for ndds._format + *pFormat = ndds._format; + } + else + { + *pFormat = format; + } + } _pscratchTilla->execute(SCI_EMPTYUNDOBUFFER); _pscratchTilla->execute(SCI_SETSAVEPOINT);