Update to Scintilla 5.2.4 and Lexilla 5.1.8

Close #12022
This commit is contained in:
Christian Grasser 2022-08-14 12:23:34 +02:00 committed by Don Ho
parent 6263ce5dec
commit 6a33bf6c4c
43 changed files with 305 additions and 125 deletions

View File

@ -30,6 +30,7 @@
**.d text
**.erl text
**.gd text
**.gui text
**.iss text
**.jl text
**.json text
@ -40,9 +41,12 @@
**.octave text
**.pl text
**.p6 text
**.ps1 text
**.rb text
**.rs text
**.sql text
**.tcl text
**.tsql text
**.err text
**.mms text
**.tex text

View File

@ -32,6 +32,7 @@ variableScope:lexilla/lexers/LexBash.cxx
variableScope:lexilla/lexers/LexCmake.cxx
knownConditionTrueFalse:lexilla/lexers/LexCmake.cxx
constParameter:lexilla/lexers/LexCLW.cxx
knownConditionTrueFalse:lexilla/lexers/LexCLW.cxx
constParameter:lexilla/lexers/LexCoffeeScript.cxx
knownConditionTrueFalse:lexilla/lexers/LexCoffeeScript.cxx
constParameter:lexilla/lexers/LexCPP.cxx
@ -93,12 +94,14 @@ constParameter:lexilla/lexers/LexSTTXT.cxx
knownConditionTrueFalse:lexilla/lexers/LexTACL.cxx
clarifyCalculation:lexilla/lexers/LexTADS3.cxx
constParameter:lexilla/lexers/LexTADS3.cxx
unreadVariable:lexilla/lexers/LexTCL.cxx
invalidscanf:lexilla/lexers/LexTCMD.cxx
constParameter:lexilla/lexers/LexTeX.cxx
variableScope:lexilla/lexers/LexTeX.cxx
knownConditionTrueFalse:lexilla/lexers/LexTxt2tags.cxx
knownConditionTrueFalse:lexilla/lexers/LexVB.cxx
constParameter:lexilla/lexers/LexVerilog.cxx
variableScope:lexilla/lexers/LexVerilog.cxx
constParameter:lexilla/lexers/LexVHDL.cxx
shadowVariable:lexilla/lexers/LexVHDL.cxx
unreadVariable:lexilla/lexers/LexVHDL.cxx
@ -142,9 +145,6 @@ constVariable:lexilla/lexers/LexTACL.cxx
constVariable:lexilla/lexers/LexTADS3.cxx
constVariable:lexilla/lexers/LexTAL.cxx
// Suppress consting argv in main as non-const is standard
constParameter:lexilla/examples/CheckLexilla/CheckLexilla.c
// Suppress everything in test example files
*:lexilla/test/examples/*

View File

@ -9,7 +9,7 @@
<meta name="keywords" content="Scintilla, SciTE, Editing Component, Text Editor" />
<meta name="Description"
content="www.scintilla.org is the home of the Scintilla editing component and SciTE text editor application." />
<meta name="Date.Modified" content="20220522" />
<meta name="Date.Modified" content="20220710" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
.logo {
@ -61,8 +61,8 @@
<font color="#FFCC99" size="4"> A library of language lexers for use with Scintilla</font>
</td>
<td width="40%" align="right">
<font color="#FFCC99" size="3">Release version 5.1.7<br />
Site last modified May 22 2022</font>
<font color="#FFCC99" size="3">Release version 5.1.8<br />
Site last modified July 10 2022</font>
</td>
<td width="20%">
&nbsp;
@ -77,12 +77,11 @@
</tr>
</table>
<ul id="versionlist">
<li>Version 5.1.8 improves F#, MS SQL, PowerShell, and Visual Prolog.</li>
<li>Version 5.1.7 improves CMake, HTML, Matlab, Raku, Ruby, and VHDL.</li>
<li>Version 5.1.6 improves Markdown and Ruby.</li>
<li>Version 5.1.5 improves Bash, Batch, F#, HTML, Inno Setup, and Python.</li>
<li>Version 5.1.4 adds lexers for AsciiDoc and GDScript.</li>
<li>Version 5.1.3 improves Rust.</li>
<li>Version 5.1.2 improves CSS, F#, Inno Setup, Markdown, and PHP.</li>
</ul>
<ul id="menu">
<li id="remote1"><a href="https://www.scintilla.org/SciTEImage.html">Screenshot</a></li>

View File

@ -26,9 +26,9 @@
<table bgcolor="#CCCCCC" width="100%" cellspacing="0" cellpadding="8" border="0">
<tr>
<td>
<font size="4"> <a href="https://www.scintilla.org/lexilla517.zip">
<font size="4"> <a href="https://www.scintilla.org/lexilla518.zip">
Windows</a>&nbsp;&nbsp;
<a href="https://www.scintilla.org/lexilla517.tgz">
<a href="https://www.scintilla.org/lexilla518.tgz">
GTK/Linux</a>&nbsp;&nbsp;
</font>
</td>
@ -42,7 +42,7 @@
containing very few restrictions.
</p>
<h3>
Release 5.1.7
Release 5.1.8
</h3>
<h4>
Source Code
@ -50,8 +50,8 @@
The source code package contains all of the source code for Lexilla but no binary
executable code and is available in
<ul>
<li><a href="https://www.scintilla.org/lexilla517.zip">zip format</a> (1.1M) commonly used on Windows</li>
<li><a href="https://www.scintilla.org/lexilla517.tgz">tgz format</a> (0.9M) commonly used on Linux and compatible operating systems</li>
<li><a href="https://www.scintilla.org/lexilla518.zip">zip format</a> (1.1M) commonly used on Windows</li>
<li><a href="https://www.scintilla.org/lexilla518.tgz">tgz format</a> (0.9M) commonly used on Linux and compatible operating systems</li>
</ul>
Instructions for building on both Windows and Linux are included in the readme file.
<h4>

View File

@ -583,6 +583,45 @@
</tr>
</table>
<h2>Releases</h2>
<h3>
<a href="https://www.scintilla.org/lexilla519.zip">Release 5.1.8</a>
</h3>
<ul>
<li>
Released 10 July 2022.
</li>
<li>
F#: Recognize nested comments in F#.
<a href="https://github.com/ScintillaOrg/lexilla/issues/93">Issue #93</a>.
</li>
<li>
MS SQL: Recognize nested comments in Transact-SQL.
<a href="https://github.com/ScintillaOrg/lexilla/issues/87">Issue #87</a>.
</li>
<li>
MS SQL: Preference data types more consistently to not depend on how lexing is broken
up into segments. This is needed because there are keywords that are both data type
names and function names such as 'CHAR'.
<a href="https://github.com/ScintillaOrg/lexilla/issues/90">Issue #90</a>.
</li>
<li>
PowerShell: Fix single quoted strings to not treat backtick as escape.
<a href="https://github.com/ScintillaOrg/lexilla/pull/92">Pull request #92</a>.
</li>
<li>
Visual Prolog: Treat \r\n line ends the same as \n. This makes testing easier.
Add test case.
<a href="https://github.com/ScintillaOrg/lexilla/issues/83">Issue #83</a>.
</li>
<li>
Visual Prolog: Allow disabling verbatim strings.
<a href="https://github.com/ScintillaOrg/lexilla/pull/89">Pull request #89</a>.
</li>
<li>
Visual Prolog: Support backquoted strings.
<a href="https://github.com/ScintillaOrg/lexilla/pull/89">Pull request #89</a>.
</li>
</ul>
<h3>
<a href="https://www.scintilla.org/lexilla517.zip">Release 5.1.7</a>
</h3>

View File

@ -372,12 +372,14 @@ Sci_Position SCI_METHOD LexerFSharp::WordListSet(int n, const char *wl) {
void SCI_METHOD LexerFSharp::Lex(Sci_PositionU start, Sci_Position length, int initStyle, IDocument *pAccess) {
LexAccessor styler(pAccess);
StyleContext sc(start, static_cast<Sci_PositionU>(length), initStyle, styler);
Sci_Position lineCurrent = styler.GetLine(start);
Sci_PositionU cursor = 0;
UnicodeChar uniCh = UnicodeChar();
FSharpString fsStr = FSharpString();
constexpr Sci_Position MAX_WORD_LEN = 64;
constexpr int SPACE = ' ';
int currentBase = 10;
int levelNesting = (lineCurrent >= 1) ? styler.GetLineState(lineCurrent - 1) : 0;
bool isInterpolated = false;
while (sc.More()) {
@ -454,9 +456,22 @@ void SCI_METHOD LexerFSharp::Lex(Sci_PositionU start, Sci_Position length, int i
}
break;
case SCE_FSHARP_COMMENT:
if (MatchStreamCommentStart(sc)) {
sc.Forward();
sc.ch = SPACE;
levelNesting++;
} else if (MatchStreamCommentEnd(sc)) {
if (levelNesting > 0)
levelNesting--;
else {
state = SCE_FSHARP_DEFAULT;
colorSpan++;
}
}
break;
case SCE_FSHARP_ATTRIBUTE:
case SCE_FSHARP_QUOTATION:
if (MatchStreamCommentEnd(sc) || MatchTypeAttributeEnd(sc) || MatchQuotedExpressionEnd(sc)) {
if (MatchTypeAttributeEnd(sc) || MatchQuotedExpressionEnd(sc)) {
state = SCE_FSHARP_DEFAULT;
colorSpan++;
}
@ -598,6 +613,11 @@ void SCI_METHOD LexerFSharp::Lex(Sci_PositionU start, Sci_Position length, int i
break;
}
if (sc.MatchLineEnd()) {
styler.SetLineState(lineCurrent++, (sc.state == SCE_FSHARP_COMMENT) ? levelNesting : 0);
advance = true;
}
if (state >= SCE_FSHARP_DEFAULT) {
styler.ColourTo(colorSpan, sc.state);
sc.ChangeState(state);
@ -660,9 +680,15 @@ void SCI_METHOD LexerFSharp::Fold(Sci_PositionU start, Sci_Position length, int
}
if (options.foldCommentStream && style == SCE_FSHARP_COMMENT && !inLineComment) {
if (stylePrev != SCE_FSHARP_COMMENT) {
if (stylePrev != SCE_FSHARP_COMMENT ||
(styler.Match(currentPos, "(*") &&
!LineContains(styler, "*)", lineCurrent, SCE_FSHARP_COMMENT))) {
levelNext++;
} else if (styleNext != SCE_FSHARP_COMMENT && !atEOL) {
} else if ((styleNext != SCE_FSHARP_COMMENT ||
((styler.Match(currentPos, "*)") &&
!LineContains(styler, "(*", lineCurrent, SCE_FSHARP_COMMENT)) &&
styler.GetLineState(lineCurrent - 1) > 0)) &&
!atEOL) {
levelNext--;
}
}

View File

@ -116,9 +116,17 @@ static void ColouriseMSSQLDoc(Sci_PositionU startPos, Sci_Position length,
int prevState = initStyle;
char chPrev = ' ';
char chNext = styler[startPos];
int nesting = 0;
if (lineCurrent >= 1) {
nesting = styler.GetLineState(lineCurrent - 1);
}
styler.StartSegment(startPos);
Sci_PositionU lengthDoc = startPos + length;
for (Sci_PositionU i = startPos; i < lengthDoc; i++) {
const Sci_Position lineStartNext = styler.LineStart(lineCurrent + 1);
const bool atEOL = (static_cast<Sci_Position>(i) == (lineStartNext - 1));
char ch = chNext;
chNext = styler.SafeGetCharAt(i + 1);
@ -185,7 +193,7 @@ static void ColouriseMSSQLDoc(Sci_PositionU startPos, Sci_Position length,
// If is the default or one of the above succeeded
if (state == SCE_MSSQL_DEFAULT || state == SCE_MSSQL_DEFAULT_PREF_DATATYPE) {
if (iswordstart(ch)) {
styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
styler.ColourTo(i - 1, state);
prevState = state;
state = SCE_MSSQL_IDENTIFIER;
} else if (ch == '/' && chNext == '*') {
@ -193,7 +201,7 @@ static void ColouriseMSSQLDoc(Sci_PositionU startPos, Sci_Position length,
prevState = state;
state = SCE_MSSQL_COMMENT;
} else if (ch == '-' && chNext == '-') {
styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
styler.ColourTo(i - 1, state);
prevState = state;
state = SCE_MSSQL_LINE_COMMENT;
} else if (ch == '\'') {
@ -209,7 +217,7 @@ static void ColouriseMSSQLDoc(Sci_PositionU startPos, Sci_Position length,
prevState = state;
state = SCE_MSSQL_COLUMN_NAME_2;
} else if (isoperator(ch)) {
styler.ColourTo(i - 1, SCE_MSSQL_DEFAULT);
styler.ColourTo(i - 1, state);
styler.ColourTo(i, SCE_MSSQL_OPERATOR);
//~ style = SCE_MSSQL_DEFAULT;
prevState = state;
@ -227,8 +235,12 @@ static void ColouriseMSSQLDoc(Sci_PositionU startPos, Sci_Position length,
// When the last char is part of the state...
} else if (state == SCE_MSSQL_COMMENT) {
if (ch == '/' && chPrev == '*') {
if (((i > (styler.GetStartSegment() + 2)) || ((initStyle == SCE_MSSQL_COMMENT) &&
if (ch == '/' && chNext == '*')
nesting++;
else if (ch == '/' && chPrev == '*') {
if (nesting > 0)
nesting--;
else if (((i > (styler.GetStartSegment() + 2)) || ((initStyle == SCE_MSSQL_COMMENT) &&
(styler.GetStartSegment() == startPos)))) {
styler.ColourTo(i, state);
//~ state = SCE_MSSQL_COMMENT;
@ -273,6 +285,9 @@ static void ColouriseMSSQLDoc(Sci_PositionU startPos, Sci_Position length,
}
}
if (atEOL)
styler.SetLineState(lineCurrent++, (state == SCE_MSSQL_COMMENT) ? nesting : 0);
chPrev = ch;
}
styler.ColourTo(lengthDoc - 1, state);

View File

@ -85,8 +85,6 @@ static void ColourisePowerShellDoc(Sci_PositionU startPos, Sci_Position length,
// This is a single quote string
if (sc.ch == '\'') {
sc.ForwardSetState(SCE_POWERSHELL_DEFAULT);
} else if (sc.ch == '`') {
sc.Forward(); // skip next escaped character
}
} else if (sc.state == SCE_POWERSHELL_HERE_STRING) {
// This is a doubles quotes here-string

View File

@ -48,7 +48,11 @@ using namespace Lexilla;
// Options used for LexerVisualProlog
struct OptionsVisualProlog {
bool verbatimStrings;
bool backQuotedStrings;
OptionsVisualProlog() {
verbatimStrings = true;
backQuotedStrings = false;
}
};
@ -62,6 +66,10 @@ static const char *const visualPrologWordLists[] = {
struct OptionSetVisualProlog : public OptionSet<OptionsVisualProlog> {
OptionSetVisualProlog() {
DefineProperty("lexer.visualprolog.verbatim.strings", &OptionsVisualProlog::verbatimStrings,
"Set to 0 to disable highlighting verbatim strings using '@'.");
DefineProperty("lexer.visualprolog.backquoted.strings", &OptionsVisualProlog::backQuotedStrings,
"Set to 1 to enable using back quotes (``) to delimit strings.");
DefineWordListSets(visualPrologWordLists);
}
};
@ -333,7 +341,7 @@ void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position leng
}
break;
case SCE_VISUALPROLOG_COMMENT_LINE:
if (sc.atLineEnd) {
if (sc.MatchLineEnd()) {
int nextState = (nestLevel == 0) ? SCE_VISUALPROLOG_DEFAULT : SCE_VISUALPROLOG_COMMENT_BLOCK;
sc.SetState(nextState);
} else if (sc.Match('@')) {
@ -342,13 +350,13 @@ void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position leng
}
break;
case SCE_VISUALPROLOG_COMMENT_KEY_ERROR:
if (!setDoxygen.Contains(sc.ch) || sc.atLineEnd) {
if (!setDoxygen.Contains(sc.ch) || sc.MatchLineEnd()) {
char s[1000];
sc.GetCurrent(s, sizeof(s));
if (docKeywords.InList(s+1)) {
sc.ChangeState(SCE_VISUALPROLOG_COMMENT_KEY);
}
if (SCE_VISUALPROLOG_COMMENT_LINE == styleBeforeDocKeyword && sc.atLineEnd) {
if (SCE_VISUALPROLOG_COMMENT_LINE == styleBeforeDocKeyword && sc.MatchLineEnd()) {
// end line comment
int nextState = (nestLevel == 0) ? SCE_VISUALPROLOG_DEFAULT : SCE_VISUALPROLOG_COMMENT_BLOCK;
sc.SetState(nextState);
@ -372,7 +380,7 @@ void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position leng
sc.SetState(SCE_VISUALPROLOG_STRING);
// Falls through.
case SCE_VISUALPROLOG_STRING:
if (sc.atLineEnd) {
if (sc.MatchLineEnd()) {
sc.SetState(SCE_VISUALPROLOG_STRING_EOL_OPEN);
} else if (sc.Match(closingQuote)) {
sc.ForwardSetState(SCE_VISUALPROLOG_DEFAULT);
@ -388,11 +396,13 @@ void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position leng
break;
case SCE_VISUALPROLOG_STRING_VERBATIM_SPECIAL:
case SCE_VISUALPROLOG_STRING_VERBATIM_EOL:
if(sc.state == SCE_VISUALPROLOG_STRING_VERBATIM_EOL && !sc.atLineStart)
break;
// return to SCE_VISUALPROLOG_STRING_VERBATIM and treat as such (fall-through)
sc.SetState(SCE_VISUALPROLOG_STRING_VERBATIM);
// Falls through.
case SCE_VISUALPROLOG_STRING_VERBATIM:
if (sc.atLineEnd) {
if (sc.MatchLineEnd()) {
sc.SetState(SCE_VISUALPROLOG_STRING_VERBATIM_EOL);
} else if (sc.Match(closingQuote)) {
if (closingQuote == sc.chNext) {
@ -405,7 +415,7 @@ void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position leng
break;
}
if (sc.atLineEnd) {
if (sc.MatchLineEnd()) {
// Update the line state, so it can be seen by next line
int lineState = 0;
if (SCE_VISUALPROLOG_STRING_VERBATIM_EOL == sc.state) {
@ -419,7 +429,7 @@ void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position leng
// Determine if a new state should be entered.
if (sc.state == SCE_VISUALPROLOG_DEFAULT) {
if (sc.Match('@') && isOpenStringVerbatim(sc.chNext, closingQuote)) {
if (options.verbatimStrings && sc.Match('@') && isOpenStringVerbatim(sc.chNext, closingQuote)) {
sc.SetState(SCE_VISUALPROLOG_STRING_VERBATIM);
sc.Forward();
} else if (IsADigit(sc.ch) || (sc.Match('.') && IsADigit(sc.chNext))) {
@ -442,9 +452,13 @@ void SCI_METHOD LexerVisualProlog::Lex(Sci_PositionU startPos, Sci_Position leng
} else if (sc.Match('"')) {
closingQuote = '"';
sc.SetState(SCE_VISUALPROLOG_STRING);
} else if (options.backQuotedStrings && sc.Match('`')) {
closingQuote = '`';
sc.SetState(SCE_VISUALPROLOG_STRING);
} else if (sc.Match('#')) {
sc.SetState(SCE_VISUALPROLOG_KEY_DIRECTIVE);
} else if (isoperator(static_cast<char>(sc.ch)) || sc.Match('\\')) {
} else if (isoperator(static_cast<char>(sc.ch)) || sc.Match('\\') ||
(!options.verbatimStrings && sc.Match('@'))) {
sc.SetState(SCE_VISUALPROLOG_OPERATOR);
}
}

View File

@ -20,6 +20,7 @@ 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;
@ -29,7 +30,8 @@ bool LexAccessor::MatchIgnoreCase(Sci_Position pos, const char *s) {
}
void LexAccessor::GetRange(Sci_PositionU startPos_, Sci_PositionU endPos_, char *s, Sci_PositionU len) {
assert(startPos_ <= endPos_ && len != 0 && s != nullptr);
assert(s);
assert(startPos_ <= endPos_ && len != 0);
endPos_ = std::min(endPos_, startPos_ + len - 1);
len = endPos_ - startPos_;
if (startPos_ >= static_cast<Sci_PositionU>(startPos) && endPos_ <= static_cast<Sci_PositionU>(endPos)) {
@ -42,6 +44,7 @@ void LexAccessor::GetRange(Sci_PositionU startPos_, Sci_PositionU endPos_, char
}
void LexAccessor::GetRangeLowered(Sci_PositionU startPos_, Sci_PositionU endPos_, char *s, Sci_PositionU len) {
assert(s);
GetRange(startPos_, endPos_, s, len);
while (*s) {
if (*s >= 'A' && *s <= 'Z') {

View File

@ -69,6 +69,9 @@ public:
case 950:
case 1361:
encodingType = EncodingType::dbcs;
break;
default:
break;
}
}
char operator[](Sci_Position position) {
@ -101,6 +104,7 @@ public:
return encodingType;
}
bool Match(Sci_Position pos, const char *s) {
assert(s);
for (int i=0; *s; i++) {
if (*s != SafeGetCharAt(pos+i))
return false;

View File

@ -65,6 +65,8 @@ class OptionSet {
}
break;
}
default:
break;
}
return false;
}

View File

@ -8,6 +8,7 @@
// Maintain a dictionary of properties
#include <cstdlib>
#include <cassert>
#include <cstring>
#include <string>
@ -68,6 +69,7 @@ const char *PropSetSimple::Get(std::string_view key) const {
int PropSetSimple::GetInt(std::string_view key, int defaultValue) const {
const char *val = Get(key);
assert(val);
if (*val) {
return atoi(val);
}

View File

@ -24,6 +24,7 @@ namespace {
* after each word.
*/
std::unique_ptr<char *[]> ArrayFromWordList(char *wordlist, size_t slen, size_t *len, bool onlyLineEnds = false) {
assert(wordlist);
size_t words = 0;
// For rapid determination of whether a character is a separator, build
// a look up table.

View File

@ -90,12 +90,13 @@
<ItemDefinitionGroup>
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<PreprocessorDefinitions>WIN32;SCI_LEXER;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_WARNINGS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;SCI_LEXER;_CRT_SECURE_NO_DEPRECATE;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\include;..\..\scintilla\include;..\lexlib;</AdditionalIncludeDirectories>
<BrowseInformation>true</BrowseInformation>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<MinimalRebuild>false</MinimalRebuild>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@ -108,7 +109,6 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpp17</LanguageStandard>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
@ -118,7 +118,6 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpp17</LanguageStandard>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
@ -128,7 +127,6 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpp17</LanguageStandard>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
@ -141,7 +139,6 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpp17</LanguageStandard>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
@ -154,7 +151,6 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpp17</LanguageStandard>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
@ -167,7 +163,6 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpp17</LanguageStandard>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>5.1.7</string>
<string>5.1.8</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSHumanReadableCopyright</key>

View File

@ -851,7 +851,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5.1.7;
CURRENT_PROJECT_VERSION = 5.1.8;
DEVELOPMENT_TEAM = 4F446KW87E;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
@ -877,7 +877,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 5.1.7;
CURRENT_PROJECT_VERSION = 5.1.8;
DEVELOPMENT_TEAM = 4F446KW87E;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;

View File

@ -4,8 +4,8 @@
#include <windows.h>
#define VERSION_LEXILLA "5.1.7"
#define VERSION_WORDS 5, 1, 7, 0
#define VERSION_LEXILLA "5.1.8"
#define VERSION_WORDS 5, 1, 8, 0
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION_WORDS

View File

@ -35,7 +35,7 @@ SUBSYSTEM=-SUBSYSTEM:WINDOWS,10.00
!ENDIF
!ENDIF
CRTFLAGS=-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 -D_CRT_SECURE_NO_DEPRECATE=1 -D_SCL_SECURE_NO_WARNINGS=1 $(ADD_DEFINE)
CRTFLAGS=-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1 -D_CRT_SECURE_NO_DEPRECATE=1 $(ADD_DEFINE)
CXXFLAGS=-Zi -TP -MP -W4 -EHsc -std:c++17 $(CRTFLAGS)
CXXDEBUG=-Od -MTd -DDEBUG
CXXNDEBUG=-O1 -MT -DNDEBUG -GL

View File

@ -113,3 +113,5 @@ There is some support for running benchmarks on lexers and folders. The properti
testlexers.repeat.lex and testlexers.repeat.fold specify the number of times example
documents are lexed or folded. Set to a large number like testlexers.repeat.lex=10000
then run with a profiler.
A list of styles used in a lex can be displayed with testlexers.list.styles=1.

View File

@ -807,6 +807,21 @@ bool TestFile(const std::filesystem::path &path, const PropertyMap &propertyMap)
success = false;
}
if (propertyMap.GetPropertyValue("testlexers.list.styles").value_or(0)) {
std::vector<bool> used(0x80);
for (Sci_Position pos = 0; pos < pdoc->Length(); pos++) {
const unsigned style = pdoc->StyleAt(pos);
used.at(style) = true;
}
std::cout << " ";
for (int style = 0; style < 0x80; style++) {
if (used.at(style)) {
std::cout << style << " ";
}
}
std::cout << "\n";
}
const std::optional<int> perLineDisable = propertyMap.GetPropertyValue("testlexers.per.line.disable");
const bool disablePerLineTests = perLineDisable.value_or(false);

View File

@ -12,9 +12,9 @@ LIBS = ../bin/liblexilla.lib
!ENDIF
!IFDEF DEBUG
DEBUG_OPTIONS = -Od -MTd -DDEBUG $(STATIC_FLAG)
DEBUG_OPTIONS = -Zi -DEBUG -Od -MTd -DDEBUG $(STATIC_FLAG)
!ELSE
DEBUG_OPTIONS=-O1 -MT -DNDEBUG $(STATIC_FLAG) -GL
DEBUG_OPTIONS = -O1 -MT -DNDEBUG $(STATIC_FLAG) -GL
!ENDIF
CXXFLAGS = /EHsc /std:c++latest $(DEBUG_OPTIONS) $(INCLUDEDIRS)

View File

@ -1 +1 @@
517
518

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>5.2.3</string>
<string>5.2.4</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSHumanReadableCopyright</key>

View File

@ -565,7 +565,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5.2.3;
CURRENT_PROJECT_VERSION = 5.2.4;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@ -627,7 +627,7 @@
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 5.2.3;
CURRENT_PROJECT_VERSION = 5.2.4;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@ -657,7 +657,7 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 5.2.3;
CURRENT_PROJECT_VERSION = 5.2.4;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
@ -691,7 +691,7 @@
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 5.2.3;
CURRENT_PROJECT_VERSION = 5.2.4;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;

View File

@ -4708,6 +4708,10 @@ struct Sci_TextToFindFull {
<p>If the call succeeded <code>SCI_GETBIDIRECTIONAL</code> will return the same value otherwise
<code>SC_BIDIRECTIONAL_DISABLED</code> (0) is returned.
</p>
<p>Opaque selection drawing (<a class="seealso" href="#SCI_SETSELECTIONLAYER">SC_LAYER_BASE</a>)
is not supported in bidirectional mode.
Use <code>SC_LAYER_UNDER_TEXT</code> or <code>SC_LAYER_OVER_TEXT</code> instead.
</p>
</div>
<p><b id="SCI_GRABFOCUS">SCI_GRABFOCUS</b><br />

View File

@ -26,9 +26,9 @@
<table bgcolor="#CCCCCC" width="100%" cellspacing="0" cellpadding="8" border="0">
<tr>
<td>
<font size="4"> <a href="https://www.scintilla.org/scintilla523.zip">
<font size="4"> <a href="https://www.scintilla.org/scintilla524.zip">
Windows</a>&nbsp;&nbsp;
<a href="https://www.scintilla.org/scintilla523.tgz">
<a href="https://www.scintilla.org/scintilla524.tgz">
GTK/Linux</a>&nbsp;&nbsp;
</font>
</td>
@ -42,7 +42,7 @@
containing very few restrictions.
</p>
<h3>
Release 5.2.3
Release 5.2.4
</h3>
<h4>
Source Code
@ -50,8 +50,8 @@
The source code package contains all of the source code for Scintilla but no binary
executable code and is available in
<ul>
<li><a href="https://www.scintilla.org/scintilla523.zip">zip format</a> (1.3M) commonly used on Windows</li>
<li><a href="https://www.scintilla.org/scintilla523.tgz">tgz format</a> (1.2M) commonly used on Linux and compatible operating systems</li>
<li><a href="https://www.scintilla.org/scintilla524.zip">zip format</a> (1.3M) commonly used on Windows</li>
<li><a href="https://www.scintilla.org/scintilla524.tgz">tgz format</a> (1.2M) commonly used on Linux and compatible operating systems</li>
</ul>
Instructions for building on both Windows and Linux are included in the readme file.
<h4>

View File

@ -573,6 +573,29 @@
</tr>
</table>
<h2>Releases</h2>
<h3>
<a href="https://www.scintilla.org/scintilla524.zip">Release 5.2.4</a>
</h3>
<ul>
<li>
Released 10 July 2022.
</li>
<li>
Fix hiding selection when selection layer is SC_LAYER_UNDER_TEXT.
<a href="https://sourceforge.net/p/scintilla/bugs/2334/">Bug #2334</a>.
</li>
<li>
Fix bad background colour for additional, secondary, and inactive selections when printing.
<a href="https://sourceforge.net/p/scintilla/bugs/2335/">Bug #2335</a>.
</li>
<li>
Fix failures on GTK with non-UTF-8 text when multi-threading due to
character set conversion code that was not thread-safe.
</li>
<li>
Fix crash when printing on Win32 in bidirectional mode with a non-empty selection.
</li>
</ul>
<h3>
<a href="https://www.scintilla.org/scintilla523.zip">Release 5.2.3</a>
</h3>

View File

@ -9,7 +9,7 @@
<meta name="keywords" content="Scintilla, SciTE, Editing Component, Text Editor" />
<meta name="Description"
content="www.scintilla.org is the home of the Scintilla editing component and SciTE text editor application." />
<meta name="Date.Modified" content="20220522" />
<meta name="Date.Modified" content="20220710" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
#versionlist {
@ -56,8 +56,8 @@
GTK, and macOS</font>
</td>
<td width="40%" align="right">
<font color="#FFCC99" size="3"> Release version 5.2.3<br />
Site last modified May 22 2022</font>
<font color="#FFCC99" size="3"> Release version 5.2.4<br />
Site last modified July 10 2022</font>
</td>
<td width="20%">
&nbsp;
@ -72,6 +72,7 @@
</tr>
</table>
<ul id="versionlist">
<li>Version 5.2.4 fixes failures on GTK with multi-threaded layout.</li>
<li>Version 5.2.3 adds 64-bit safe APIs and fixes scrollbar on GTK with Xorg.</li>
<li>Version 5.2.2 on GTK, scroll horizontally with Shift + Scroll Wheel.</li>
<li>Version 5.2.1 fixes leaks on GTK.</li>

View File

@ -775,12 +775,11 @@ void SurfaceImpl::DrawTextBase(PRectangle rc, const Font *font_, XYPOSITION ybas
PenColourAlpha(fore);
const XYPOSITION xText = rc.left;
if (PFont(font_)->fd) {
std::string utfForm;
if (et == EncodingType::utf8) {
LayoutSetText(layout.get(), text);
} else {
SetConverter(PFont(font_)->characterSet);
utfForm = UTF8FromIconv(conv, text);
std::string utfForm = UTF8FromIconv(conv, text);
if (utfForm.empty()) { // iconv failed so treat as Latin1
utfForm = UTF8FromLatin1(text);
}
@ -897,14 +896,34 @@ void SurfaceImpl::MeasureWidths(const Font *font_, std::string_view text, XYPOSI
PLATFORM_ASSERT(static_cast<size_t>(i) == text.length());
} else {
int positionsCalculated = 0;
const char *charSetID = CharacterSetID(PFont(font_)->characterSet);
std::string utfForm;
{
gsize bytesRead = 0;
gsize bytesWritten = 0;
GError *error = nullptr;
UniqueStr textInUTF8(g_convert(text.data(), text.length(),
"UTF-8", charSetID,
&bytesRead,
&bytesWritten,
&error));
if ((bytesWritten > 0) && (bytesRead == text.length()) && !error) {
// Extra allocation here but avoiding it makes code more complex
utfForm.assign(textInUTF8.get(), bytesWritten);
}
if (error) {
#ifdef DEBUG
fprintf(stderr, "MeasureWidths: %s.\n", error->message);
#endif
g_error_free(error);
}
}
if (et == EncodingType::dbcs) {
SetConverter(PFont(font_)->characterSet);
std::string utfForm = UTF8FromIconv(conv, text);
if (!utfForm.empty()) {
// Convert to UTF-8 so can ask Pango for widths, then
// Loop through UTF-8 and DBCS forms, taking account of different
// character byte lengths.
Converter convMeasure("UCS-2", CharacterSetID(characterSet), false);
Converter convMeasure("UCS-2", charSetID, false);
int i = 0;
ClusterIterator iti(layoutMeasure.get(), utfForm);
int clusterStart = iti.curIndex;
@ -916,7 +935,7 @@ void SurfaceImpl::MeasureWidths(const Font *font_, std::string_view text, XYPOSI
while (!iti.finished) {
iti.Next();
const int clusterEnd = iti.curIndex;
const int places = g_utf8_strlen(utfForm.c_str() + clusterStart, clusterEnd - clusterStart);
const int places = g_utf8_strlen(utfForm.data() + clusterStart, clusterEnd - clusterStart);
int place = 1;
while (clusterStart < clusterEnd) {
size_t lenChar = MultiByteLenFromIconv(convMeasure, text.data()+i, text.length()-i);
@ -934,12 +953,13 @@ void SurfaceImpl::MeasureWidths(const Font *font_, std::string_view text, XYPOSI
if (positionsCalculated < 1) {
const size_t lenPositions = text.length();
// Either 8-bit or DBCS conversion failed so treat as 8-bit.
SetConverter(PFont(font_)->characterSet);
const bool rtlCheck = PFont(font_)->characterSet == CharacterSet::Hebrew ||
PFont(font_)->characterSet == CharacterSet::Arabic;
std::string utfForm = UTF8FromIconv(conv, text);
if (utfForm.empty()) {
utfForm = UTF8FromLatin1(text);
#ifdef DEBUG
fprintf(stderr, "MeasureWidths: Fall back to Latin1 [%s]\n", utfForm.c_str());
#endif
}
size_t i = 0;
// Each 8-bit input character may take 1 or 2 bytes in UTF-8
@ -954,9 +974,13 @@ void SurfaceImpl::MeasureWidths(const Font *font_, std::string_view text, XYPOSI
while (!iti.finished) {
iti.Next();
const int clusterEnd = iti.curIndex;
const int ligatureLength = g_utf8_strlen(utfForm.c_str() + clusterStart, clusterEnd - clusterStart);
if (rtlCheck && ((clusterEnd <= clusterStart) || (ligatureLength == 0) || (ligatureLength > 3))) {
const int ligatureLength = g_utf8_strlen(utfForm.data() + clusterStart, clusterEnd - clusterStart);
if (((i + ligatureLength) > lenPositions) ||
(rtlCheck && ((clusterEnd <= clusterStart) || (ligatureLength == 0) || (ligatureLength > 3)))) {
// Something has gone wrong: exit quickly but pretend all the characters are equally spaced:
#ifdef DEBUG
fprintf(stderr, "MeasureWidths: result too long.\n");
#endif
EquallySpaced(layoutMeasure.get(), positions, lenPositions);
return;
}
@ -983,13 +1007,12 @@ void SurfaceImpl::MeasureWidths(const Font *font_, std::string_view text, XYPOSI
XYPOSITION SurfaceImpl::WidthText(const Font *font_, std::string_view text) {
if (PFont(font_)->fd) {
std::string utfForm;
pango_layout_set_font_description(layout.get(), PFont(font_)->fd.get());
if (et == EncodingType::utf8) {
LayoutSetText(layout.get(), text);
} else {
SetConverter(PFont(font_)->characterSet);
utfForm = UTF8FromIconv(conv, text);
std::string utfForm = UTF8FromIconv(conv, text);
if (utfForm.empty()) { // iconv failed so treat as Latin1
utfForm = UTF8FromLatin1(text);
}
@ -1365,7 +1388,7 @@ class ListBoxX : public ListBox {
WindowID frame;
WindowID list;
WindowID scroller;
void *pixhash;
GHashTable *pixhash;
GtkCellRenderer *pixbuf_renderer;
GtkCellRenderer *renderer;
RGBAImageSet images;
@ -1392,8 +1415,8 @@ public:
ListBoxX&operator=(ListBoxX&&) = delete;
~ListBoxX() noexcept override {
if (pixhash) {
g_hash_table_foreach((GHashTable *) pixhash, list_image_free, nullptr);
g_hash_table_destroy((GHashTable *) pixhash);
g_hash_table_foreach(pixhash, list_image_free, nullptr);
g_hash_table_destroy(pixhash);
}
if (widCached) {
gtk_widget_destroy(GTK_WIDGET(widCached));
@ -1846,7 +1869,7 @@ static void init_pixmap(ListImage *list_image) noexcept {
void ListBoxX::Append(char *s, int type) {
ListImage *list_image = nullptr;
if ((type >= 0) && pixhash) {
list_image = static_cast<ListImage *>(g_hash_table_lookup((GHashTable *) pixhash,
list_image = static_cast<ListImage *>(g_hash_table_lookup(pixhash,
GINT_TO_POINTER(type)));
}
GtkTreeIter iter {};
@ -2007,7 +2030,7 @@ void ListBoxX::RegisterRGBA(int type, std::unique_ptr<RGBAImage> image) {
if (!pixhash) {
pixhash = g_hash_table_new(g_direct_hash, g_direct_equal);
}
ListImage *list_image = static_cast<ListImage *>(g_hash_table_lookup((GHashTable *) pixhash,
ListImage *list_image = static_cast<ListImage *>(g_hash_table_lookup(pixhash,
GINT_TO_POINTER(type)));
if (list_image) {
// Drop icon already registered
@ -2018,7 +2041,7 @@ void ListBoxX::RegisterRGBA(int type, std::unique_ptr<RGBAImage> image) {
} else {
list_image = g_new0(ListImage, 1);
list_image->rgba_data = observe;
g_hash_table_insert((GHashTable *) pixhash, GINT_TO_POINTER(type),
g_hash_table_insert(pixhash, GINT_TO_POINTER(type),
(gpointer) list_image);
}
}

View File

@ -3231,9 +3231,9 @@ void ScintillaGTK::ClassInit(OBJECT_CLASS *object_class, GtkWidgetClass *widget_
static void scintilla_class_init(ScintillaClass *klass) {
try {
OBJECT_CLASS *object_class = (OBJECT_CLASS *) klass;
GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;
GtkContainerClass *container_class = (GtkContainerClass *) klass;
OBJECT_CLASS *object_class = reinterpret_cast<OBJECT_CLASS *>(klass);
GtkWidgetClass *widget_class = reinterpret_cast<GtkWidgetClass *>(klass);
GtkContainerClass *container_class = reinterpret_cast<GtkContainerClass *>(klass);
const GSignalFlags sigflags = static_cast<GSignalFlags>(G_SIGNAL_ACTION | G_SIGNAL_RUN_LAST);
scintilla_signals[COMMAND_SIGNAL] = g_signal_new(

View File

@ -188,7 +188,7 @@ gchar *ScintillaGTKAccessible::GetTextRangeUTF8(Sci::Position startByte, Sci::Po
// like TargetAsUTF8, but avoids a double conversion
if (sci->IsUnicodeMode() || ! *(charSetBuffer = sci->CharacterSetID())) {
int len = endByte - startByte;
utf8Text = (char *) g_malloc(len + 1);
utf8Text = static_cast<gchar *>(g_malloc(len + 1));
sci->pdoc->GetCharRange(utf8Text, startByte, len);
utf8Text[len] = '\0';
} else {
@ -196,7 +196,7 @@ gchar *ScintillaGTKAccessible::GetTextRangeUTF8(Sci::Position startByte, Sci::Po
std::string s = sci->RangeText(startByte, endByte);
std::string tmputf = ConvertText(&s[0], s.length(), "UTF-8", charSetBuffer, false);
size_t len = tmputf.length();
utf8Text = (char *) g_malloc(len + 1);
utf8Text = static_cast<gchar *>(g_malloc(len + 1));
memcpy(utf8Text, tmputf.c_str(), len);
utf8Text[len] = '\0';
}
@ -1085,11 +1085,11 @@ static GType scintilla_object_accessible_get_type(GType parent_type G_GNUC_UNUSE
static AtkObject *scintilla_object_accessible_new(GType parent_type, GObject *obj) {
g_return_val_if_fail(SCINTILLA_IS_OBJECT(obj), nullptr);
AtkObject *accessible = (AtkObject *) g_object_new(scintilla_object_accessible_get_type(parent_type),
AtkObject *accessible = static_cast<AtkObject *>(g_object_new(scintilla_object_accessible_get_type(parent_type),
#if HAVE_WIDGET_SET_UNSET
"widget", obj,
#endif
nullptr);
nullptr));
atk_object_initialize(accessible, obj);
return accessible;

View File

@ -13,7 +13,7 @@ TEMPLATE = lib
CONFIG += lib_bundle
CONFIG += c++1z
VERSION = 5.2.3
VERSION = 5.2.4
SOURCES += \
ScintillaEdit.cpp \

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
# WidgetGen.py - regenerate the ScintillaWidgetCpp.cpp and ScintillaWidgetCpp.h files
# WidgetGen.py - regenerate the ScintillaEdit.cpp and ScintillaEdit.h files
# Check that API includes all gtkscintilla2 functions
import sys
@ -92,20 +92,6 @@ def arguments(v, stringResult, options):
ret = ret + p2Type + " " + normalisedName(v["Param2Name"], options)
return ret
def printPyFile(f, options):
out = []
for name in f.order:
v = f.features[name]
if v["Category"] != "Deprecated":
feat = v["FeatureType"]
if feat in ["val"]:
out.append(name + "=" + v["Value"])
if feat in ["evt"]:
out.append("SCN_" + name.upper() + "=" + v["Value"])
if feat in ["fun"]:
out.append("SCI_" + name.upper() + "=" + v["Value"])
return out
def printHFile(f, options):
out = []
for name in f.order:
@ -202,7 +188,7 @@ def gtkNames():
def usage():
print("WidgetGen.py [-c|--clean][-h|--help][-u|--underscore-names]")
print("")
print("Generate full APIs for ScintillaEdit class and ScintillaConstants.py.")
print("Generate full APIs for ScintillaEdit class.")
print("")
print("options:")
print("")
@ -242,9 +228,6 @@ def main(argv):
"/* ", True, printCPPFile(f, options))
GenerateFile("ScintillaEdit.h.template", "ScintillaEdit.h",
"/* ", True, printHFile(f, options))
GenerateFile("../ScintillaEditPy/ScintillaConstants.py.template",
"../ScintillaEditPy/ScintillaConstants.py",
"# ", True, printPyFile(f, options))
if checkGTK:
names = set(methodNames(f))
#~ print("\n".join(names))
@ -259,7 +242,7 @@ def main(argv):
raise
if cleanGenerated:
for file in ["ScintillaEdit.cpp", "ScintillaEdit.h", "../ScintillaEditPy/ScintillaConstants.py"]:
for file in ["ScintillaEdit.cpp", "ScintillaEdit.h"]:
try:
os.remove(file)
except OSError:

View File

@ -12,7 +12,7 @@ TEMPLATE = lib
CONFIG += lib_bundle
CONFIG += c++1z
VERSION = 5.2.3
VERSION = 5.2.4
SOURCES += \
PlatQt.cpp \

View File

@ -53,8 +53,8 @@ ScintillaQt::~ScintillaQt()
void ScintillaQt::execCommand(QAction *action)
{
int command = action->data().toInt();
Command(command);
const int commandNum = action->data().toInt();
Command(commandNum);
}
#if defined(Q_OS_WIN)

View File

@ -934,7 +934,7 @@ Sci::Position EditView::StartEndDisplayLine(Surface *surface, const EditModel &m
namespace {
constexpr ColourRGBA bugColour = ColourRGBA(0xff, 0, 0xff, 0xf0);
constexpr ColourRGBA bugColour = ColourRGBA(0xff, 0, 0xfe, 0xf0);
// Selection background colours are always defined, the value_or is to show if bug
@ -1974,18 +1974,20 @@ static void DrawTranslucentSelection(Surface *surface, const EditModel &model, c
model, vsDraw, model.sel.RangeType(r));
const XYPOSITION spaceWidth = vsDraw.styles[ll->EndLineStyle()].spaceWidth;
if (model.BidirectionalEnabled()) {
const int selectionStart = static_cast<int>(portion.start.Position() - posLineStart - lineRange.start);
const int selectionEnd = static_cast<int>(portion.end.Position() - posLineStart - lineRange.start);
const Sci::Position selectionStart = portion.start.Position() - posLineStart - lineRange.start;
const Sci::Position selectionEnd = portion.end.Position() - posLineStart - lineRange.start;
const ScreenLine screenLine(ll, subLine, vsDraw, rcLine.right, tabWidthMinimumPixels);
std::unique_ptr<IScreenLineLayout> slLayout = surface->Layout(&screenLine);
const std::vector<Interval> intervals = slLayout->FindRangeIntervals(selectionStart, selectionEnd);
for (const Interval &interval : intervals) {
const XYPOSITION rcRight = interval.right + xStart;
const XYPOSITION rcLeft = interval.left + xStart;
const PRectangle rcSelection(rcLeft, rcLine.top, rcRight, rcLine.bottom);
surface->FillRectangleAligned(rcSelection, selectionBack);
if (slLayout) {
const std::vector<Interval> intervals = slLayout->FindRangeIntervals(selectionStart, selectionEnd);
for (const Interval &interval : intervals) {
const XYPOSITION rcRight = interval.right + xStart;
const XYPOSITION rcLeft = interval.left + xStart;
const PRectangle rcSelection(rcLeft, rcLine.top, rcRight, rcLine.bottom);
surface->FillRectangleAligned(rcSelection, selectionBack);
}
}
if (portion.end.VirtualSpace()) {
@ -2355,7 +2357,9 @@ void EditView::DrawLine(Surface *surface, const EditModel &model, const ViewStyl
}
if (FlagSet(phase, DrawPhase::text)) {
DrawTranslucentSelection(surface, model, vsDraw, ll, line, rcLine, subLine, lineRange, xStart, tabWidthMinimumPixels, Layer::UnderText);
if (!hideSelection) {
DrawTranslucentSelection(surface, model, vsDraw, ll, line, rcLine, subLine, lineRange, xStart, tabWidthMinimumPixels, Layer::UnderText);
}
DrawTranslucentLineState(surface, model, vsDraw, ll, line, rcLine, subLine, Layer::UnderText);
DrawForeground(surface, model, vsDraw, ll, lineVisible, rcLine, lineRange, posLineStart, xStart,
subLine, background);
@ -2694,8 +2698,12 @@ Sci::Position EditView::FormatRange(bool draw, CharacterRangeFull chrg, Rectangl
// Don't show the selection when printing
vsPrint.elementColours.clear();
vsPrint.elementBaseColours.clear();
// Transparent:
vsPrint.elementBaseColours[Element::SelectionBack] = ColourRGBA(0xc0, 0xc0, 0xc0, 0x0);
// Set all selection background colours to be transparent.
constexpr ColourRGBA transparent(0xc0, 0xc0, 0xc0, 0x0);
vsPrint.elementBaseColours[Element::SelectionBack] = transparent;
vsPrint.elementBaseColours[Element::SelectionAdditionalBack] = transparent;
vsPrint.elementBaseColours[Element::SelectionSecondaryBack] = transparent;
vsPrint.elementBaseColours[Element::SelectionInactiveBack] = transparent;
vsPrint.caretLine.alwaysShow = false;
// Don't highlight matching braces using indicators
vsPrint.braceHighlightIndicatorSet = false;

View File

@ -1 +1 @@
523
524

View File

@ -4,8 +4,8 @@
#include <windows.h>
#define VERSION_SCINTILLA "5.2.3"
#define VERSION_WORDS 5, 2, 3, 0
#define VERSION_SCINTILLA "5.2.4"
#define VERSION_WORDS 5, 2, 4, 0
VS_VERSION_INFO VERSIONINFO
FILEVERSION VERSION_WORDS

View File

@ -70,6 +70,24 @@
<PropertyGroup>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<IntDir>Intermediates\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<IntDir>Intermediates\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IntDir>Intermediates\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IntDir>Intermediates\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<IntDir>Intermediates\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<IntDir>Intermediates\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<WarningLevel>Level4</WarningLevel>

View File

@ -99,6 +99,7 @@
#include "ScintillaWin.h"
#include "BoostRegexSearch.h"
//needed for gcc builds
#ifndef SPI_GETWHEELSCROLLLINES
#define SPI_GETWHEELSCROLLLINES 104
#endif