56 Commits

Author SHA1 Message Date
xomx
c63c0035f3 Fix saving 4GB+ files file size cutting off issue
This commit fixes invalid 64-bit to 32-bit castings of filesize integers.

Fix #12526, close #12736
2022-12-31 17:52:20 +01:00
xomx
4f1aa7b004 Fix crash on Win32 Namespace prefixed file name
Implement support for Win32 Namespace prefixed file name in Notepad++.
(Ref: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#win32-file-namespaces)

Support the Win32-filenames escaped by \\?\ or \\?\UNC\, possible globbing in filenames (\\?\C:\fil?.txt) and shell links (\\?\C:\file.txt.lnk) included.

Unsupported (temporarily - it needs further patches for Notepad++):
- any raw filename with length exceeding the MAX_PATH.
- any nonstandard Windows OS filename: with 'dot' or 'space' char(s) at the name end, WinOS reserved ones: AUX, CON, PRN, NUL, COM1-9, LPT1-9 and the ones with invalid ASCII chars in it (0-31, <, >, | , ").

Fix #12453, close #12613
2022-12-14 15:02:04 +01:00
Don Ho
c63cc6f219 Fix Default Language not working for the 1st empty file with empty session
Fix #12586
2022-12-02 17:57:50 +01:00
Biswapriyo Nath
f3f615d522 Set PKGBUILD and APKBUILD syntax highlighting as shell script
Both PKGBUILD and APKBUILD files are actually shell script. See
* https://wiki.archlinux.org/title/PKGBUILD
* https://wiki.alpinelinux.org/wiki/APKBUILD_Reference

Close #12445
2022-11-01 22:43:56 +01:00
Don Ho
cd6a6ac3bb Add "Allow clickable link" option in large file restriction
And enhance large file restriction UI

Close #12369
2022-10-22 14:31:19 +02:00
Don Ho
6755daf223 Enhance Large File Restriction UI
1. Rename some labels to be more explicit.
2. Add a tooltip for "Deactivate Word Wrap globally".
3. Unchecking "Enable Large File Restriction" removes the sub-restrictions.
2022-10-20 05:07:17 +02:00
Don Ho
8ff003412a Make large file limit (for styling) configurable
Background: because styling large file can cause the performance issue, 200 MB (and bigger) file is not applied to its language (if any) while loading.
This PR makes large file restriction for styling and for other features (smart highlighting, brace match, etc...) configurable via the section Performance of Preferences dialog.

Fix #11389, fix #12260, fix #11670, close #12310
2022-10-15 18:18:06 +02:00
Don Ho
a26599794c Refactoring & optimizing open/save large files time 2022-10-09 01:08:22 +02:00
Robert Di Pardo
a610387fb4 Fix language detected from content not applied if default language is set
Properly handle missing file extensions in `Buffer::setFileName`

Before 6263ce5, the user-preferred default language would apply to
files with no extension, but got overwritten by `L_TEXT` when the
extension was present *but unknown*.

This is why the `buf->_lang == L_TEXT` condition failed *only for
buffers with _no_ extension*.

Fix #11504, close #12286
2022-10-05 00:56:15 +02:00
Don Ho
af0bc2e113 Revert "Fix detected language not being applied issue"
This reverts commit 6263ce5dece595543bbfaa4207391075ae3a212a for fixing the regression.

Fix #12226, fix #12253
2022-10-05 00:06:57 +02:00
ozone10
3295cc8d2c Code improvement
Fix warnings ,some conversion-null, format, unused-but-set-variable, class-memaccess.
Add initializer.

Fix #12171, close #12172
2022-09-15 02:07:38 +02:00
ozone10
2da5c5b393 Code enhancement
Fix parentheses, misleading-indentation, sign-compare, some conversion-null warnings.

Fix #12139, close #12140
2022-09-11 18:22:51 +02:00
Don Ho
82055985f3 Add Plugin list repository link and its version in PluginAdmin dialog
And add the localization entries.
2022-09-09 17:56:39 +02:00
Robert Di Pardo
6263ce5dec Fix detected language not being applied issue
Fix detected language not being applied if Default languge is set in Document settings.
Don't override detected file type with default language:

When loading files with no extension from disk, remove the extra condition so the default language setting does not take precedence over the auto-detected file type (if any)

Fix #11504, close #11992
2022-08-27 02:35:26 +02:00
xomx
9d69db9b15 Fix a crash issue due to opening an empty .NFO file
There was an infinite recursion for such empty files, when the default setting for new files was UTF8.

Fixes #11820, close #11824
2022-06-27 06:01:33 +02:00
Don Ho
10f48e36ad Fix typos 2022-05-19 19:32:35 +02:00
Don Ho
48ee390cdd Fix doc being wronly marked as saved bug after converting its encoding
Fix #11436, close #11440
2022-04-04 21:58:20 +02:00
Don Ho
2113e782fb Use string lexer ID instead of numeric ID for Scintilla 5
Plus some factoring.

Close #11472
2022-04-04 18:01:51 +02:00
Don Ho
121a396bf0 Make external language library work again after upgrading to Scintilla5
Make external lexer library work again after upgrading to Scintilla5.
Old external lexer libraries needs to add CreateLexer export function which returns ILexer5 instance (Lexilla protocol interface of Scintilla5).

Tested with papyrus lexer plugin, this external lexer plugin is compatible with Notepad++ next release:
https://github.com/blu3mania/npp-papyrus

Close #11468
2022-04-03 18:23:03 +02:00
Don Ho
252468c29b Revert "Remove the external lexer support"
This reverts commit 41a5bf0245b53e74186e49a21adec2c518587b5c.
2022-04-01 19:17:18 +02:00
Don Ho
41a5bf0245 Remove the external lexer support
SCI_LOADLEXERLIBRARY has been removed since Scintilla 5,
and I belive that Scintilla won't support it anymore:
https://sourceforge.net/p/scintilla/bugs/2236/

Close #11451
2022-03-30 18:52:47 +02:00
Christian Grasser
a61b03ea88 Update Scintilla from v4.4.6 to v5.2.1 and add Lexilla v5.1.5
Update with https://www.scintilla.org/scintilla521.zip
            https://www.scintilla.org/lexilla515.zip

- fix setting to bring Scintilla::PositionCR from ScintillaStructures.h inline with Sci_Position.h Sci_PositionCR
- add workaround to enable lexer for searchResult
commented out SCI_SETILEXER call on searchResult to get one result which is correctly handled by the lexer,
added comment about the current problem with property @MarkingsStruct which seems to disappear after call to SCI_SETILEXER or CreateLexer
- corrected usage of ObjC lexer
- removed unnecessary filter stuff
- use own sections for scintilla and lexilla build targets and allow parallel builds
- as libscilex is no longer existing, changed to libscintilla
- adapt makefiles and cmake
- use VS2019
- started simple changes for createlexer adaptations, nullpointercheck missing on return of lexer name from deprecated LexerNameFromID -> undefined behaviour
- movement from id -> lexer name, mostly done via LexerNameFromID + switching off corresponding compiler warning
- changed to SCI_SETILEXER from SCI_SETLEXER, SCI_SETLEXERLANGUAGE needs to be corrected, see Scintilla5Migration.html
- just commented out: SCI_LOADLEXERLIBRARY

Fix #10504, close #11419
2022-03-27 17:12:53 +02:00
Don Ho
a06b404708 Add Notepad++ compatible versions in plugin list
Implement: https://github.com/notepad-plus-plus/nppPluginList/issues/416

While PluginAdmin loading nppPluginList.dll, it will check an attribute "npp-compatible-versions" (optional),
in order to determinate if plugin is compatible to the current version of Notepad++. If plugin is not compatible,
then this plugin will be ignored, therefore it won't be shown on the PluginAdmin's plugin list.
Note that it's only about pluginsAdmin's plugin list:
it prevent from Notepad++ install/update a plugin non-compatible to current version of Notepad++,
but it still allows Notepad++ load this plugin in question, if it's already installed.

Here is the attribite "npp-compatible-versions" looks like in plugin list json file:
```
{
	"name": "npp-pluginList",
	"version": "1.4.7",
	"arch": "32",
	"npp-plugins": [
		{
			"folder-name": "demoPluginA",
			"display-name": "Demo Plugin A",
			"version": "1.8.7",
			"npp-compatible-versions": "[4.2,6.6.6]",
			"id": "9c566a9083ef66a0ce93a3ce5f55977faea559b5b0993e37a1461b87f4aeb6f0",
			...
		},
		{
			"folder-name": "demoPluginB",
			"display-name": "Demo Plugin B",
			"version": "1.1.8.7",
			"id": "8a6b9dadbf2ec37d5c60a12a5445f0eec2ef00e6eaa80452925789fd73950193",
			...
		},
		...
	}
}
```
It's optional. In the case of its absence, it's considered compatible to all versions of Notepad++.
The format of value for "npp-compatible-versions" is following (no white space is allowed):

"6.9"          : exact version 6.9
"[4.2,6.6.6]"  : from version 4.2 to 6.6.6 inclusive
"[8.3,]"       : any version from 8.3 to the latest one
"[,8.2.1]"     : 8.2.1 and any previous version

Fix #11338, close #11334
2022-03-04 17:36:57 +01:00
Don Ho
2321e648ae Fix regression: file can't be saved if it's set to other charset before
Fix #11238
2022-02-18 14:49:21 +01:00
Don Ho
51b1c9377c Fix incorrect message on double click on search result regression
This regression was inserted by commit c0be50494ceba80bd1c380f64c9c02391f926526 (PR #11107).

Fix #11215, Fix #11106
2022-02-16 18:22:47 +01:00
Don Ho
785453147b Inialize all memebers of struct (instead of its 1st member) to zero
The curly brace initiator in C/C++ is quite confusing (at least to me).
The C style array uses {0} for initializing all the array to 0,
whereas C++ struct uses {0} for initializing only the 1st member's value to 0.
If we want to set all members' value in a struct to 0, we should use {} instread of {0}.

This commit fix the error which initialize only the 1st member's value to 0 in the structures.

Ref:
1. https://docs.microsoft.com/en-us/cpp/cpp/initializing-classes-and-structs-without-constructors-cpp?view=msvc-170
2. https://en.cppreference.com/w/c/language/struct_initialization
2022-02-09 16:41:56 +01:00
xomx
85e7207eef Enhance error handling while opening file
In FileManager::loadFileData method:
1. Fix unnecessary GCC crashes when opening larger files in 32-bit Notepad++ binary.
2. Take into account and report correctly also other possible Scintilla error states there (than the previously handled SC_STATUS_BADALLOC).
3. Catch and report correctly also exceptions not handled by the Scintilla exception handler.
4. Catch and report correctly also Notepad++ code exceptions there.

Fix #11103, close #11112
2022-02-07 23:34:54 +01:00
Christian Grasser
c0be50494c Fix NPPM_RELOADFILE with 8.3 path containing bug
Fixes issue seen with pythonscript testcase https://github.com/bruderstein/PythonScript/blob/master/PythonScript/python_tests/tests/NotepadWrapperTestCase.py#L383-L397 using NPPM_RELOADFILE with a 8.3 path containing.

Fix #11106, close #11107
2022-02-04 17:17:37 +01:00
Don Ho
774321e099 Improve 200MB+ files loading/editing performance
While loading files over more 200MB, they are all considered as Normal text files, that improve loading speed (for example for huge XML or SQL file).
Also, the feature as braces match, smart highlightingg, tag match and URL colorization are disabled for not penalizing the editing performance.
2022-01-28 19:49:58 +01:00
Don Ho
db3308329b Fix crash on opening file with wild card characters
And redefining Sci_PositionCR to 64 bits on x64 build for managing 2GB+ files.
(ref: https://github.com/notepad-plus-plus/notepad-plus-plus/pull/11047#issuecomment-1021540298)

Fix #11098
2022-01-28 04:17:45 +01:00
Don Ho
44004d41d4 Enhance large file loading: disable 4 features for large files
Dur to the performaance issue, the loading of large files will disable automatically the following feature:
1. auto-completion (only for large files)
2. snapshot periode backup (only for large files)
3. backup on save (only for large files)
4. word wrap (persistent for all files. Need to enable it manually)

Ref: https://community.notepad-plus-plus.org/topic/22438/notepad-v8-2-2-release-candidate/6?_=1643194615292

Fix #8802
2022-01-27 16:12:50 +01:00
Don Ho
edabe44000 Disable Word Wrap while load a 2GB+ file 2022-01-26 18:44:58 +01:00
Don Ho
2132505cba Fix unsaved untitled files not being opened on the next session regression
Fix #11080
2022-01-26 17:49:37 +01:00
Don Ho
961a133a60 Remove 2GB file open restriction for x64 binary
Fix #10921, close #11047
2022-01-25 18:08:05 +01:00
Don Ho
cb7bbef4fe Fix "File is too big to open" message isn't modal issue
And plus some refactoring.
2022-01-14 15:09:13 +01:00
Don Ho
7ebb1e3672 Add Find/Replace text swap button in Find replace dialog
Fix  #6010, close #11037
2022-01-13 18:44:03 +01:00
Don Ho
ae09024e66 Fix UTF-8 detected wrongly as TIS-620 issue
uchardet detects usually wrongly UTF-8 as TIS-620, hence TIS-620 detection is disabled in this commit.
More info:
https://github.com/notepad-plus-plus/notepad-plus-plus/issues/10916#issuecomment-1001671957

Fix #10916, fix #940, fix #8755, fix #3588, fix #3188, fix #4932, fix #3172, fix #10492, close #10958
2021-12-27 20:17:18 +01:00
Don Ho
a563a8b812 Open "crontab" file by using syntax highlighting of bash
Fix #3377, close #10943
2021-12-24 03:19:19 +01:00
Don Ho
0f4010eada Refactoring for the readability 2021-12-05 04:45:55 +01:00
xomx
bf732c9991 Fix dirty status after reloading file
Fix #10796, close #10874
2021-12-05 04:15:12 +01:00
Don Ho
acb8a9db47 Add logs for nul content corruption issue
These logs are written for debugging NUL file-corruption issue (#6133) and session lost issue (#10402) which are still problematic probably.
The writting log info will be triggered only when Windows notifies Notepad++ to end session.
The log file will be in "%APPDATA%\Notepad++\" or in Notepad++ installation folder if doLocalConf.xml is present.
To disable the log, just remove nppLogNulContentCorruptionIssue.xml.

Close #10871
2021-12-04 15:33:32 +01:00
Don Ho
12a13b1c0a Fix saving file and false alert on network drive issues
And add log ability for debugging network drive file status detection issue.

To activate log, user should:
1. Add an empty "nppLogNetworkDriveIssue.xml" file beside of notepad++.exe, or if user has no admin previlege, he/she can add this file into %APPDATA%\Notepad++\.
2. Create "C:\temp\" directory, if it doesn't exist yet.
3. Start notepad++.exe, and wait for the file status (timestamp) detection error from the network drive. If the errors occur, there should be some trace in "C:\temp\nppLogNetworkDriveIssue.log".

People who have had the network drive file status detection issue in #10688, #10753, #10757, #10751 & #10787 are welcome to download the binary and provide the generated log in order to fix this issue.

Fix #10751, fix #10688, fix #10753, fix #10757, fix #10751, fix #10787, close #10847
2021-12-01 20:42:35 +01:00
Don Ho
bab3573be7 Fix detection of backup file restored back problem
Fix #10839, close #10843
2021-11-27 16:27:59 +01:00
Don Ho
df396b9e69 Fix reload false alarm from the network drive
This regression is due to the saving routine's change:
9aa9ecb664

Normally, on each save, buffer's timestamp is updated for the future comparison with the timestamp on the disk, in order to detect the modification from outside.

It seems the new saving routing makes the change (ONLY on network disk) with the timestamp before buffer's timestamp, for unknown reason.

The fix is: if timestamp got directly from the file on disk is earlier than buffer's timestamp, it's an absurd case and we ignore it. The buffer's timestamp will be only updated if the file on disk timestamp is later than buffer's one.

Fix #10688, fix #10753, fix #10757, close #10774
2021-11-13 00:45:57 +01:00
Don Ho
1a02319a8a Fix empty file with non-Unicode encoding cannot be saved issue
The PR fixes the regression due to the saving file API being changecd from POSIX functions to Win32 native API:
The old used function "fopen" using "wbc" as argument, according Microsoft document:
"w" 	Opens an empty file for writing. If the given file exists, its contents are destroyed.
(https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-wfopen?view=msvc-160)
so to save a 0 length document, it was unecessary to "write nothing" explicitely on disk, since fopen did it for you.
Whereas our new implementation which uses Win32 native API passes "OPEN_ALWAYS" - that needs to "write nothing" explicitely.

Fix #10699, close #10702
2021-10-21 21:14:59 +02:00
Don Ho
6c3031f01b Fix file can be marked as saved even it's been deleted outside
This PR make buffer always dirty (with any undo/redo operation) if the editing buffer is unsyncronized with file on disk.
By "unsyncronized", it means:
1. the file is deleted outside but the buffer in Notepad++ is kept.
2. the file is modified by another app but the buffer is not reloaded in Notepad++.

Note that if the buffer is untitled, there's no correspondent file on the disk so the buffer is considered as independent therefore synchronized.

Fix #10401, close #10616
2021-10-05 02:32:40 +02:00
Don Ho
682a8edafa CFile (Win32 API IO) Refactoring
1. Rename CFile to Win32_IO_File (plus some modification in class).
2. Add new method writeStr() in Win32_IO_File class to write "char*" & string.
3. Change method names of Utf8_16_Write class and make writeFile() method return accurate type (boolean).

Close #10612
2021-10-02 15:00:08 +02:00
Pavel Nedev
9aa9ecb664 Fix NUL file-corruption issue after system shutting down brutally
Uses native Win32 IO API (CreateFile, ReadFile, WriteFile, CloseHandle) instead of POSIX ones (fopen, fread, fwrite, fclose) for remedying NUL file-corruption problem due to system shutting down brutally.

Fix #6133, close #10598
2021-09-28 12:30:05 +02:00
Don Ho
e5a800722b Make code more sanitary
Fix some vulnerable codes detected by VS's analyzing.

Close #10541
2021-09-12 18:50:30 +02:00
mere-human
6a4ef408f2 Fix GCC compiler warnings in Notepad++
Fix #10037, close #10048
2021-06-23 12:49:06 +02:00