mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-11-05 22:13:50 +01:00
Release 5.5.7 (https://www.scintilla.org/scintilla557.zip) Released 8 June 2025 1. Add SCI_SCROLLVERTICAL method to restore view position and maintain it while performing line wrapping. 2. Add SC_UNDO_SELECTION_HISTORY_SCROLL flag to SCI_SETUNDOSELECTIONHISTORY which controls whether undo and redo restore vertical scroll position. 3. Tweak SC_MARK_BAR to be slightly wider by using next higher whole pixel instead of next lower for margin width / 3. 4. Scale images in autocompletion lists with SCI_AUTOCSETIMAGESCALE to match high DPI screens. Initially only on GTK and Qt. 5. Fix wrapping bug for UTF-8 where \r\n could wrap between the characters. Notepad++ Pull Request #16373. 6. Fix crash during painting when scroll bars changed. Bug #2481. 7. On GTK, reset vertical scroll bar synchronously in SCI_SETDOCPOINTER to fix bug where scroll position not restored in non-wrap mode. Bug #2416. 8. On GTK, fix IME problem when tentative composition interfered with delete surrounding. Feature #1476. 9. On GTK, update IME cursor position inside retrieve surrounding to better position candidate window. Feature #1488. Release 5.4.5 (https://www.scintilla.org/lexilla545.zip) Released 8 June 2025 1. Dart: Add error state SCE_DART_STRINGEOL for unterminated string. Pull request #315. 2. Makefile: Add a keyword list to makefile lexer to highlight GNU Make directives like 'ifdef' and 'vpath' as SCE_MAKE_PREPROCESSOR since these are similar to NMAKE directives like '!IFDEF'. 3. Nix: Add error state SCE_NIX_STRINGEOL for unterminated string. Pull request #315. 4. TOML: Add error state SCE_TOML_STRINGEOL for unterminated string. Pull request #315. 5. Zig: Add error state SCE_ZIG_STRINGEOL for unterminated string. Pull request #315. Close #16649
95 lines
2.5 KiB
C++
95 lines
2.5 KiB
C++
// Scintilla source code edit control
|
|
/** @file LexAccessor.cxx
|
|
** Interfaces between Scintilla and lexers.
|
|
**/
|
|
// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
|
|
// The License.txt file describes the conditions under which this software may be distributed.
|
|
#include <cassert>
|
|
#include <cstring>
|
|
|
|
#include <string>
|
|
#include <algorithm>
|
|
|
|
#include "ILexer.h"
|
|
#include "Scintilla.h"
|
|
|
|
#include "LexAccessor.h"
|
|
#include "CharacterSet.h"
|
|
|
|
using namespace Lexilla;
|
|
|
|
namespace Lexilla {
|
|
|
|
bool LexAccessor::MatchIgnoreCase(Sci_Position pos, const char *s) {
|
|
assert(s);
|
|
for (; *s; s++, pos++) {
|
|
if (*s != MakeLowerCase(SafeGetCharAt(pos))) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void LexAccessor::GetRange(Sci_PositionU startPos_, Sci_PositionU endPos_, char *s, Sci_PositionU len) const {
|
|
assert(s);
|
|
assert(startPos_ <= endPos_ && len != 0);
|
|
memset(s, '\0', len);
|
|
endPos_ = std::min(endPos_, startPos_ + len - 1);
|
|
endPos_ = std::min(endPos_, static_cast<Sci_PositionU>(lenDoc));
|
|
len = endPos_ - startPos_;
|
|
if (startPos_ >= static_cast<Sci_PositionU>(startPos) && endPos_ <= static_cast<Sci_PositionU>(endPos)) {
|
|
const char * const p = buf + (startPos_ - startPos);
|
|
memcpy(s, p, len);
|
|
} else {
|
|
pAccess->GetCharRange(s, startPos_, len);
|
|
}
|
|
}
|
|
|
|
void LexAccessor::GetRangeLowered(Sci_PositionU startPos_, Sci_PositionU endPos_, char *s, Sci_PositionU len) const {
|
|
assert(s);
|
|
GetRange(startPos_, endPos_, s, len);
|
|
while (*s) {
|
|
if (*s >= 'A' && *s <= 'Z') {
|
|
*s += 'a' - 'A';
|
|
}
|
|
++s;
|
|
}
|
|
}
|
|
|
|
std::string LexAccessor::GetRange(Sci_PositionU startPos_, Sci_PositionU endPos_) const {
|
|
assert(startPos_ < endPos_);
|
|
endPos_ = std::min(endPos_, static_cast<Sci_PositionU>(lenDoc));
|
|
const Sci_PositionU len = endPos_ - startPos_;
|
|
std::string s(len, '\0');
|
|
GetRange(startPos_, endPos_, s.data(), len + 1);
|
|
return s;
|
|
}
|
|
|
|
std::string LexAccessor::GetRangeLowered(Sci_PositionU startPos_, Sci_PositionU endPos_) const {
|
|
assert(startPos_ < endPos_);
|
|
endPos_ = std::min(endPos_, static_cast<Sci_PositionU>(lenDoc));
|
|
const Sci_PositionU len = endPos_ - startPos_;
|
|
std::string s(len, '\0');
|
|
GetRangeLowered(startPos_, endPos_, s.data(), len + 1);
|
|
return s;
|
|
}
|
|
|
|
void LexAccessor::SetLevelIfDifferent(Sci_Position line, int level) {
|
|
if (level != pAccess->GetLevel(line)) {
|
|
pAccess->SetLevel(line, level);
|
|
}
|
|
}
|
|
|
|
int FoldLevelFlags(int levelLine, int levelNext, bool white, bool headerPermitted) noexcept {
|
|
int flags = 0;
|
|
if (white) {
|
|
flags |= SC_FOLDLEVELWHITEFLAG;
|
|
}
|
|
if ((levelLine < levelNext) && (headerPermitted)) {
|
|
flags |= SC_FOLDLEVELHEADERFLAG;
|
|
}
|
|
return flags;
|
|
}
|
|
|
|
}
|