parent
6263ce5dec
commit
6a33bf6c4c
Binary file not shown.
Binary file not shown.
|
@ -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
|
||||
|
|
|
@ -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/*
|
||||
|
||||
|
|
|
@ -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%">
|
||||
|
||||
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
<a href="https://www.scintilla.org/lexilla517.tgz">
|
||||
<a href="https://www.scintilla.org/lexilla518.tgz">
|
||||
GTK/Linux</a>
|
||||
</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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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--;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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') {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -65,6 +65,8 @@ class OptionSet {
|
|||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1 +1 @@
|
|||
517
|
||||
518
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 />
|
||||
|
|
|
@ -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>
|
||||
<a href="https://www.scintilla.org/scintilla523.tgz">
|
||||
<a href="https://www.scintilla.org/scintilla524.tgz">
|
||||
GTK/Linux</a>
|
||||
</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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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%">
|
||||
|
||||
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -13,7 +13,7 @@ TEMPLATE = lib
|
|||
CONFIG += lib_bundle
|
||||
CONFIG += c++1z
|
||||
|
||||
VERSION = 5.2.3
|
||||
VERSION = 5.2.4
|
||||
|
||||
SOURCES += \
|
||||
ScintillaEdit.cpp \
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -12,7 +12,7 @@ TEMPLATE = lib
|
|||
CONFIG += lib_bundle
|
||||
CONFIG += c++1z
|
||||
|
||||
VERSION = 5.2.3
|
||||
VERSION = 5.2.4
|
||||
|
||||
SOURCES += \
|
||||
PlatQt.cpp \
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1 +1 @@
|
|||
523
|
||||
524
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
#include "ScintillaWin.h"
|
||||
#include "BoostRegexSearch.h"
|
||||
|
||||
//needed for gcc builds
|
||||
#ifndef SPI_GETWHEELSCROLLLINES
|
||||
#define SPI_GETWHEELSCROLLLINES 104
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue