(Fixes#725)
Open a file of 3 bytes length with '\0' in the middle, only 1 character
shown in editor.
Such file is detected as UTF16 w/o BOM, that makes the wrong length
interpretation. Adding the "len mod 2 == 0" condition to enhance the
detection is the only solution I can find so far.
Closes#1054, Fixes#1002
The problem is if fread() is called multiple times, then
UnicodeConvertor->convert() is called multiple times, which causes
m_pNewBuf to point to the last read in chunk. Then after the entire file
was loaded, getEOLFormatForm(UnicodeConvertor.getNewBuf(), ...) was being
used which was only trying to detect the EOL mode from the last read in
chunk. If this last chunk started with \n then the file was detected as
Unix line endings. The file linked from issue #1002 happened to have just
the right situation where this occurred.
I have asked a question to a friend in USA for which one should I use, here is his answer:
1. "Extended (\r, \n, \t, \x..., \0)"
2. "Extended (\n, \r, \t, \0, \x...)"
The ellipsis (three dots) means that the list does not show everything that could be shown.
If you mean that there are more items than what you can show, but you are listing just the most important ones, you want the second one.
The first one implies that you are following a certain order and that some items are not listed but that \0 is last, either in list order or importance. At least, that's what it looks like to me.
closes#1007, closes#919, closes#834
When backups are enabled, playing back a macro that takes a while can
corrupt a file (see the mentioned issues). I tested this with a ~100,000
line text file, ~3.3MB in size. Created a macro of Down5, Delete10. Played
this till the end of the file. Took about 20s to run so it had a few
backup cycles during it. Reproduced it fairly easily and never had it
happen after this adjustment.
* The Shebang detection is much improved:
- detect more languages
- not tied to any specific full path
- See https://en.wikipedia.org/wiki/Shebang_%28Unix%29 for more details about Shebang
* There is not need to have a space after <?php. Closes#1014
* Remove the closing > in the html doctype to support older
* versions of html as well
* The Shebang detection is much improved:
* detect more languages
* not tied to any specific full path
* There is not need to have a space after <?php
* Remove the closing `>` in the html doctype to
support older versions of html as well
Change isQualifiedWord because isQualifiedWord use hardcode and no SCI_GETWORDCHARS smarthighlight is not always OK.
This Fix use SCI_GETWORDCHARS. (closes#187)
Fix macro playback inseting/removing characters randomly due to
auto-insert interfering during macro recording and playing back. (fixes
#649, fixes#970, fixes#304, fixes#992)
Make auto-insert more usable - no auto-insert if the following (and
previous character - in the case of quote or double quote) character is
not blank character. (fixes#584, fixes#450)
Resolve slow tab switching of folded XML file by setting the isFolding
flag to true, so it can ignore events while folding is taking place, when
switching tabs and when loading the next tab after deleting a tab.
(closes#168, fixes#236#329)
Check the beginning of file content to learn which programming language
in the content.
The detected lang type will be applied only if php, xml, html or bash is
detected.
The language type is determinated via file extension, if the file
extension is unknown or the determinated lang type is different from
the detected value, then the detected lang type via the file content
will be used.
It seems the notification area is locked (for the sake of security)
while application is in Admin mode.
Disabling the tray icon mode while Notepad++ is in Admin mode is the
compromised solution.
Changed "Mark occurences" to "Mark" as in English language file. This is obsolete. You could also say: "Replace occurences".
Also, used the same word as in menu rather than a different one.
- Fix: when search field is not empty, Function List's background color does not follow Npp theme.
- Fix: close button and textual search box now scale in high-dpi.
- Fix: icons' image not centered in icons' rectangle.
- Fix: when double-clicking the panel's toolbar, it briefly displayed a dialog to customize icons, but we can't use it there.
Known issues:
- I couldn't made toolbar icon images scale properly in high-dpi; I imagine they need to be in a ImageList, something I don't know how to use.
- TreeView icons should also be scaled, and I've done it, but they displayed strange gray background, so I decided to leave it as is now.
- It would be better to wrap icons when they don't fit in panel's width, but I don't know how to refresh the toolbar properly.
By using string instead of char * in the constructor std::string::string() make a call:
string (const string& str, size_t pos, size_t len = npos);
instead of:
string (const char* s, size_t n);
the new window always started at top-left corner of screen, and did not remember maximized state.
Now it will use the last saved window position and state.
This commit fixes 2 issues:
1. In Ascii Insert Panel the columns are too narrow under a high
resolution.
2. In function list panel and project panel, the item heights are
squeezed under a high resolution.
Reorder of escape sequences to make it more clear that there's no word ellipsis,
but a character ellipsis. Order of line break characters is natural order of
Windows line breaks. Seldomly used \0 at the end.
- This improves the commit 77e816439 that didn't completely fix#535
- This fixes the remaining text cuts, while adding space for future changes.
- Round numbers for object position/sizes.
- "exts :" -> "extensions:" for clarification.
The inconsistant untitled name issue is the first untitled document name
is "new 0" or "new 2" instead of "new 1". This fix make the first
untitled document name always be "new 1".
1. fix the hanging problem for some rare situation (some specific
graphic cards?) by replacing otf file by ttf file.
2. make better font look by adding bold, italic and bold-italic fonts
3. load Source Code Pro privately so it won't be listed for the other
application during Notepad++ session.
Source Code Pro is included in the Notepad++ distribution for its
internal use.
If it's not the first time of Notepad++ installation (ie. updating),
users need to set Source Code Pro as default font manually via style
configurator dialog, or just delete "%APPDATA%\Notepad++\stylers.xml".
Update Italian language (related to cloud settings).
Please take care that there is on item "Trim trailing and Save" (Under Macro menu) that don't have an item in language file.
Please add it.
This feature got a lot of regression due to its dependency on dropbox,
google drive and one drive implementation. This modification removes
such dependecy and allow users to set their settings location - any
cloud location path and even customized local location.
Fixed extra space between UNTITLED_STR and document number "0" when creating a
new buffer on start up through the function FileManager::bufferFromDocument().
HTML auto-complete
- add missing html elements and global events/attributes
- remove some deprecated elements, keeping popular ones
- remove duplicates
HTML lang
- add missing html elements (including deprecated ones) and global events/attributes to langs.model.xml
- remove duplicates
Use JavaScript highlight for JSON, because they have the same syntax.
- [x] `afrikaans.xml` from `iso-8859-2` to `utf-8`
- [x] `albanian.xml` from `iso-8859-2` to `utf-8`
- [x] `arabic.xml` from `iso-8859-2` to `utf-8`
- [x] `aragonese.xml` from `utf-8` to `utf-8`
- [x] `aranese.xml` from `iso-8859-2` to `utf-8`
- [x] `azerbaijani.xml` from `utf-8` to `utf-8`
- [x] `basque.xml` from `ascii` to `utf-8`
- [x] `belarusian.xml` from `windows-1251` to `utf-8`
- [x] `bengali.xml` from `utf-8` to `utf-8`
- [x] `bosnian.xml` from `iso-8859-2` to `utf-8`
- [x] `brazilian_portuguese.xml` from `ibm855` to `utf-8`
- [x] `bulgarian.xml` from `windows-1251` to `utf-8`
- [x] `catalan.xml` from `iso-8859-2` to `utf-8`
- [x] `chinese.xml` from `big5` to `utf-8`
- [x] `chineseSimplified.xml` from `gb2312` to `utf-8`
- [x] `croatian.xml` from `iso-8859-2` to `utf-8`
- [x] `czech.xml` from `iso-8859-2` to `utf-8`
- [x] `danish.xml` from `iso-8859-2` to `utf-8`
- [x] `dutch.xml` from `iso-8859-2` to `utf-8`
- [x] `english.xml` from `ascii` to `utf-8`
- [x] `english_customizable.xml` from `ascii` to `utf-8`
- [x] `esperanto.xml` from `utf-8` to `utf-8`
- [x] `estonian.xml` from `iso-8859-2` to `utf-8`
- [x] `extremaduran.xml` from `windows-1251` to `utf-8`
- [x] `farsi.xml` from `utf-8` to `utf-8`
- [x] `finnish.xml` from `windows-1255` to `utf-8`
- [x] `french.xml` from `iso-8859-2` to `utf-8`
- [x] `friulian.xml` from `iso-8859-2` to `utf-8`
- [x] `galician.xml` from `windows-1251` to `utf-8`
- [x] `georgian.xml` from `utf-8` to `utf-8`
- [x] `german.xml` from `iso-8859-7` to `utf-8`
- [x] `greek.xml` from `iso-8859-7` to `utf-8`
- [x] `gujarati.xml` from `utf-8` to `utf-8`
- [x] `hebrew.xml` from `windows-1255` to `utf-8`
- [x] `hindi.xml` from `utf-8` to `utf-8`
- [x] `hungarian.xml` from `utf-8` to `utf-8`
- [x] `indonesian.xml` from `ascii` to `utf-8`
- [x] `italian.xml` from `iso-8859-2` to `utf-8`
- [x] `japanese.xml` from `shift_jis` to `utf-8`
- [x] `kabyle.xml` from `utf-8` to `utf-8`
- [x] `kannada.xml` from `utf-8` to `utf-8`
- [x] `kazakh.xml` from `utf-8` to `utf-8`
- [x] `korean.xml` from `euc-kr` to `utf-8`
- [x] `kyrgyz.xml` from `utf-8` to `utf-8`
- [x] `latvian.xml` from `iso-8859-8` to `utf-8`
- [x] `ligurian.xml` from `iso-8859-2` to `utf-8`
- [x] `lithuanian.xml` from `iso-8859-2` to `utf-8`
- [x] `luxembourgish.xml` from `iso-8859-2` to `utf-8`
- [x] `macedonian.xml` from `utf-8` to `utf-8`
- [x] `malay.xml` from `ascii` to `utf-8`
- [x] `marathi.xml` from `utf-8` to `utf-8`
- [x] `mongolian.xml` from `utf-8` to `utf-8`
- [x] `norwegian.xml` from `iso-8859-2` to `utf-8`
- [x] `nynorsk.xml` from `iso-8859-2` to `utf-8`
- [x] `occitan.xml` from `iso-8859-2` to `utf-8`
- [x] `polish.xml` from `iso-8859-2` to `utf-8`
- [x] `portuguese.xml` from `ibm855` to `utf-8`
- [x] `romanian.xml` from `iso-8859-2` to `utf-8`
- [x] `russian.xml` from `windows-1251` to `utf-8`
- [x] `samogitian.xml` from `ascii` to `utf-8`
- [x] `sardinian.xml` from `iso-8859-2` to `utf-8`
- [x] `serbian.xml` from `iso-8859-2` to `utf-8`
- [x] `serbianCyrillic.xml` from `windows-1251` to `utf-8`
- [x] `sinhala.xml` from `utf-8` to `utf-8`
- [x] `slovak.xml` from `utf-8` to `utf-8`
- [x] `slovenian.xml` from `iso-8859-2` to `utf-8`
- [x] `spanish.xml` from `iso-8859-2` to `utf-8`
- [x] `spanish_ar.xml` from `iso-8859-2` to `utf-8`
- [x] `swedish.xml` from `iso-8859-2` to `utf-8`
- [x] `tagalog.xml` from `ascii` to `utf-8`
- [x] `tajikCyrillic.xml` from `utf-8` to `utf-8`
- [x] `tamil.xml` from `utf-8` to `utf-8`
- [x] `tatar.xml` from `utf-8` to `utf-8`
- [x] `telugu.xml` from `utf-8` to `utf-8`
- [x] `thai.xml` from `tis-620` to `utf-8`
- [x] `turkish.xml` from `iso-8859-2` to `utf-8`
- [x] `ukrainian.xml` from `utf-8` to `utf-8`
- [x] `urdu.xml` from `iso-8859-2` to `utf-8`
- [x] `uyghur.xml` from `utf-8` to `utf-8`
- [x] `uzbek.xml` from `utf-8` to `utf-8`
- [x] `uzbekCyrillic.xml` from `utf-8` to `utf-8`
- [x] `vietnamese.xml` from `utf-8` to `utf-8`
- [x] `welsh.xml` from `iso-8859-2` to `utf-8`
Use mutex of Yuni library to lock critical operation for the
compatibility of windows xp sp2.
For more info of Yuni library: https://github.com/libyuni
While user tries to save a file which requires administrator privileges,
another instance in admin mode could be launched to save the file in
question.
Make it take generic_string instead of TCHAR*, since at most callsites
we already have a generic_string.
Improve error handling. Depending on where we are in the function when
we get an error, we need to free the memory, unlock the memory, or
close the clipboard.
Note that if SetClipboardData succeeds then we should not do anything
more to the memory.
Just copy the actual results, without the additional formatting with
line and file name. It respects the hierarchy in the results, i.e.
you can copy all results from a search operation, or from a specific
file, or just the lines you selected.
When writing the parameters as a XML file (when the application quits), a new
node was created but not destroyed (`InsertEndChild` makes a clone of the
given node).
When loading a file via `FileManager::loadFileData`, a fixed-length buffer
is filled via `fread`. Then, in some cases, a conversion is done with the help
of `Utf8_16_Read`. However, the method `Utf8_16_Read::convert` performs a call
to `strlen` on this buffer. This is obviously wrong: `\0` char should be
accepted (even if a bit strange) and the buffer is not zero-terminated.
The changes merely consist in adding an additional parameter `length` to
not have to guess the size of the buffer.
The method `FileManager::loadFileData` uses a stack-based buffer for reading
a file. However, due to the optimization used by `Utf8_16_Read` (`UnicodeConvertor`),
this buffer is not copied, but a pointer to this object is kept.
After `loadFileData`, this object is destroyed, but is used afterward
(via `UnicodeConvertor.getNewBuf`).
The non-default constructor of the class Buffer calls the inner method
`checkFileState()`, using the private variable `_currentStatus` to determine
whether some checks on the file attached to the buffer are required or not.
However this variable is properly initialized _after_.
The session snapshot feature runs in its own thread and access to
Scintilla etc is not thread-safe. As a *temporary* and *non-exhaustive*
fix we guard some long-running operations (undo, redo, replace, sort)
with a mutex to prevent data corruption.
Project now utilizes the /MP compiler switch to perform
parallelized builds. The number of parallel builds performed
is determined on a per-machine basis based on available
logical CPUs.
Long term this will provide the best performance output to
code maintainability ratio compared to just enabling
precompiled headers.
Using my personal machine (8 cores), I got the following
timings (Debug configuration):
* Normal build : 89 seconds
* Multi-processor build : 28 seconds
* PCH enabled : 27 seconds
Note that the multi-processor build timings can be further
reduced with proper dependency management and removal of
existing precompiled header file (precompiledHeaders.h).
Specific Changes:
* Precompiled header support disabled (not compatible with
/MP flag).
* precompiledHeader.cpp deleted.
* Solution File added.
* Minimal Rebuild (/Gm) disabled (ignored when /MP is on).
precompiledHeaders.h still exists because it contains a ton of
inclusions required by lots of files. A second and less trivial
cleanup will involve removing the precompiledHeaders.h file and
individually correcting and satisfying dependencies in each source
file in the code base.
We need a string-to-double conversion function which acts the same on
all computers, irrespective of which locale is running. We need to
guarantee that the function expects '.' as the decimal point, and not
','. The choice of en-US is more or less arbitrary.
User can now choose between lexicographic, integer and decimal sorting.
For decimal sorting there are two further options: decimal point ('.')
or decimal comma (',').
When doing integer/decimal sort, the parsing is not as strict as
before. E.g during integer sorting the program will interpret "123abc"
as 123.
Performance of integer sorting has been improved by 30%.
The implementation of sorting is delegated to classes which implement
the new "ISorter" interface. Unfortunately due to template issues most
of the code had to go in the header file.