Merge pull request #150 from RaiKoHoff/Bookmark_Enhancements

Bookmark enhancements
This commit is contained in:
Derick Payne 2017-10-26 00:04:07 +02:00 committed by GitHub
commit 44e2d891b5
8 changed files with 240 additions and 240 deletions

View File

@ -160,8 +160,9 @@ HWND EditCreate(HWND hwndParent)
SendMessage(hwnd,SCI_SETADDITIONALSELECTIONTYPING,FALSE,0);
SendMessage(hwnd,SCI_SETADDITIONALCARETSBLINK,FALSE,0);
SendMessage(hwnd,SCI_SETADDITIONALCARETSVISIBLE,FALSE,0);
SendMessage(hwnd,SCI_SETMOUSEWHEELCAPTURES,FALSE,0);
SendMessage(hwnd, SCI_SETVIRTUALSPACEOPTIONS, (bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0);
SendMessage(hwnd,SCI_SETMOUSEDOWNCAPTURES, FALSE, 0);
SendMessage(hwnd,SCI_SETMOUSEWHEELCAPTURES,FALSE, 0);
SendMessage(hwnd,SCI_SETVIRTUALSPACEOPTIONS, (bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0);
SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_NEXT + (SCMOD_CTRL << 16)),SCI_PARADOWN);
SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_PRIOR + (SCMOD_CTRL << 16)),SCI_PARAUP);
@ -286,7 +287,7 @@ void EditSetNewText(HWND hwnd,char* lpstrText,DWORD cbText)
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
UndoRedoSelectionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)-1,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
SendMessage(hwnd,SCI_SETSCROLLWIDTH, DEFAULT_SCROLL_WIDTH,0);
SendMessage(hwnd,SCI_SETXOFFSET,0,0);
@ -330,7 +331,7 @@ BOOL EditConvertText(HWND hwnd,int encSource,int encDest,BOOL bSetSavePoint)
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
UndoRedoSelectionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)-1,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
Encoding_SciSetCodePage(hwnd,encDest);
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,(WPARAM)1,0);
//SendMessage(hwnd,EM_EMPTYUNDOBUFFER,0,0); // deprecated
@ -362,7 +363,7 @@ BOOL EditConvertText(HWND hwnd,int encSource,int encDest,BOOL bSetSavePoint)
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
UndoRedoSelectionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)-1,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
Encoding_SciSetCodePage(hwnd,encDest);
SendMessage(hwnd,SCI_ADDTEXT,cbText,(LPARAM)pchText);
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,(WPARAM)1,0);
@ -5882,7 +5883,7 @@ INT_PTR CALLBACK EditModifyLinesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM
if (GetSysColorBrush(COLOR_HOTLIGHT))
SetTextColor(hdc,GetSysColor(COLOR_HOTLIGHT));
else
SetTextColor(hdc,RGB(0,0,255));
SetTextColor(hdc,RGB(0, 0, 0xFF));
SelectObject(hdc,/*dwId == id_hover?*/hFontHover/*:hFontNormal*/);
return(LONG_PTR)GetSysColorBrush(COLOR_BTNFACE);
}

View File

@ -44,6 +44,7 @@ typedef struct _editfindreplace
#define IDMSG_SWITCHTOFIND 300
#define IDMSG_SWITCHTOREPLACE 301
#define MARKER_NP3_BOOKMARK 0
#define INDIC_NP3_MARK_OCCURANCE 1
#define INDIC_NP3_MATCH_BRACE 2

View File

@ -179,7 +179,7 @@ BOOL IniSectionSetString(LPWSTR lpCachedIniSection,LPCWSTR lpName,LPCWSTR lpStri
p = StrEnd(p) + 1;
}
StringCchPrintf(tch,COUNTOF(tch),L"%s=%s",lpName,lpString);
StringCchCopy(p,512*3+64,tch);
StringCchCopy(p,COUNTOF(tch),tch);
p = StrEnd(p) + 1;
*p = 0;
return(TRUE);

View File

@ -310,68 +310,6 @@ WCHAR g_wchWorkingDirectory[MAX_PATH+2] = { L'\0' };
static UT_icd UndoRedoSelection_icd = { sizeof(UndoRedoSelection_t), NULL, NULL, NULL };
static UT_array* UndoRedoSelectionUTArray = NULL;
//Graphics for bookmark indicator
/* XPM */
static char * bookmark_pixmap[] = {
"11 11 44 1",
" c #EBE9ED",
". c #E5E3E7",
"+ c #767C6D",
"@ c #2A3120",
"# c #1B2312",
"$ c #333B28",
"% c #E3E1E5",
"& c #D8D6DA",
"* c #444D38",
"= c #3F5C19",
"- c #63AD00",
"; c #73C900",
"> c #64AF00",
", c #3D5718",
"' c #3E4634",
") c #7B8172",
"! c #42601A",
"~ c #74CB00",
"{ c #71C600",
"] c #3A5317",
"^ c #707668",
"/ c #3F4931",
"( c #262C1D",
"_ c #2F3A1E",
": c #72C700",
"< c #74CA00",
"[ c #0E1109",
"} c #3C462F",
"| c #62AC00",
"1 c #21271A",
"2 c #7A8071",
"3 c #405D19",
"4 c #3D5A18",
"5 c #D9D7DB",
"6 c #4E5841",
"7 c #72C800",
"8 c #63AC00",
"9 c #3F5B19",
"0 c #3D4533",
"a c #DFDDE0",
"b c #353E29",
"c c #29331B",
"d c #7B8272",
"e c #DDDBDF",
" ",
" .+@#$+% ",
" &*=-;>,' ",
" )!~~~~{]^ ",
" /-~~~~~>( ",
" _:~~~~~<[ ",
" }|~~~~~|1 ",
" 23~~~~;4+ ",
" 56=|7890 ",
" a2bc}de ",
" "
};
//=============================================================================
//
// Flags
@ -1159,7 +1097,6 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
// Quickly handle painting and sizing messages, found in ScintillaWin.cxx
// Cool idea, don't know if this has any effect... ;-)
case WM_MOVE:
case WM_MOUSEWHEEL:
case WM_MOUSEACTIVATE:
case WM_NCHITTEST:
case WM_NCCALCSIZE:
@ -1283,6 +1220,13 @@ LRESULT CALLBACK MainWndProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
case WM_TRAYMESSAGE:
return MsgTrayMessage(hwnd, wParam, lParam);
case WM_MOUSEWHEEL:
case WM_MBUTTONDOWN:
if (wParam & MK_MBUTTON) {
PostMessage(hwnd, WM_COMMAND, MAKELONG(BME_EDIT_BOOKMARKTOGGLE, 1), 0);
}
return DefWindowProc(hwnd, umsg, wParam, lParam);
default:
if (umsg == msgTaskbarCreated) {
if (!IsWindowVisible(hwnd))
@ -1367,11 +1311,8 @@ LRESULT MsgCreate(HWND hwnd,WPARAM wParam,LPARAM lParam)
SendMessage(hwndEdit,SCI_SETEDGECOLUMN,iLongLinesLimit,0);
// Margins
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,2,0);
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,1,(bShowSelectionMargin)?16:0);
Style_SetCurrentMargin(hwndEdit, bShowSelectionMargin);
UpdateLineNumberWidth();
//SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,0,
// (bShowLineNumbers)?SendMessage(hwndEdit,SCI_TEXTWIDTH,STYLE_LINENUMBER,(LPARAM)L"_999999_"):0);
// Code folding
SciCall_SetMarginType(MARGIN_FOLD_INDEX, SC_MARGIN_SYMBOL);
@ -3910,39 +3851,26 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
}
case BME_EDIT_BOOKMARKTOGGLE:
{
int iPos = (int)SendMessage( hwndEdit , SCI_GETCURRENTPOS , 0 , 0);
int iLine = (int)SendMessage( hwndEdit , SCI_LINEFROMPOSITION , iPos , 0 );
{
int iPos = (int)SendMessage(hwndEdit, SCI_GETCURRENTPOS, 0, 0);
int iLine = (int)SendMessage(hwndEdit, SCI_LINEFROMPOSITION, iPos, 0);
int bitmask = (int)SendMessage( hwndEdit , SCI_MARKERGET , iLine , 0 );
if( bitmask & 1 )
{
// unset
SendMessage( hwndEdit , SCI_MARKERDELETE , iLine , 0 );
int bitmask = (int)SendMessage(hwndEdit, SCI_MARKERGET, iLine, MARKER_NP3_BOOKMARK);
if (bitmask & 1) {
// unset
SendMessage(hwndEdit, SCI_MARKERDELETE, iLine, MARKER_NP3_BOOKMARK);
}
else
{
if( bShowSelectionMargin )
{
SendMessage( hwndEdit , SCI_MARKERDEFINEPIXMAP , 0 , (LPARAM)bookmark_pixmap );
}
else
{
SendMessage( hwndEdit , SCI_MARKERSETBACK , 0 , 0xff << 8 );
SendMessage( hwndEdit , SCI_MARKERSETALPHA , 0 , 20);
SendMessage( hwndEdit , SCI_MARKERDEFINE , 0 , SC_MARK_BACKGROUND );
}
// set
SendMessage( hwndEdit , SCI_MARKERADD , iLine , 0 );
//SendMessage( hwndEdit , SCI_MARKERADD , iLine , 1 );
else {
Style_SetCurrentMargin(hwndEdit, bShowSelectionMargin);
// set
SendMessage(hwndEdit, SCI_MARKERADD, iLine, MARKER_NP3_BOOKMARK);
}
break;
}
}
case BME_EDIT_BOOKMARKCLEAR:
{
SendMessage(hwndEdit,SCI_MARKERDELETEALL,(WPARAM)-1 ,0);
SendMessage(hwndEdit,SCI_MARKERDELETEALL, (WPARAM)MARKER_NP3_BOOKMARK, 0);
break;
}
@ -4177,26 +4105,12 @@ LRESULT MsgCommand(HWND hwnd,WPARAM wParam,LPARAM lParam)
case IDM_VIEW_LINENUMBERS:
bShowLineNumbers = (bShowLineNumbers) ? FALSE : TRUE;
UpdateLineNumberWidth();
//SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,0,
// (bShowLineNumbers)?SendMessage(hwndEdit,SCI_TEXTWIDTH,STYLE_LINENUMBER,(LPARAM)"_999999_"):0);
break;
case IDM_VIEW_MARGIN:
{
bShowSelectionMargin = (bShowSelectionMargin) ? FALSE : TRUE;
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,1,(bShowSelectionMargin) ? 16 : 0);
//Depending on if the margin is visible or not, choose different bookmark indication
if (bShowSelectionMargin) {
SendMessage(hwndEdit,SCI_MARKERDEFINEPIXMAP,0,(LPARAM)bookmark_pixmap);
}
else {
SendMessage(hwndEdit,SCI_MARKERSETBACK,0,0xff << 8);
SendMessage(hwndEdit,SCI_MARKERSETALPHA,0,20);
SendMessage(hwndEdit,SCI_MARKERDEFINE,0,SC_MARK_BACKGROUND);
}
}
bShowSelectionMargin = (bShowSelectionMargin) ? FALSE : TRUE;
Style_SetCurrentMargin(hwndEdit, bShowSelectionMargin);
break;
case IDM_VIEW_AUTOCOMPLETEWORDS:
@ -5431,8 +5345,8 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
int bitmask = (int)SendMessage( hwndEdit , SCI_MARKERGET , iCurLine-1 , 0 );
if( bitmask & 1 )
{
SendMessage( hwndEdit , SCI_MARKERDELETE , iCurLine-1 , 0 );
SendMessage( hwndEdit , SCI_MARKERADD , iCurLine , 0 );
SendMessage( hwndEdit , SCI_MARKERDELETE , iCurLine-1 , MARKER_NP3_BOOKMARK);
SendMessage( hwndEdit , SCI_MARKERADD , iCurLine , MARKER_NP3_BOOKMARK);
}
}
}
@ -7048,17 +6962,15 @@ void UpdateLineNumberWidth()
StringCchPrintfA(chLines,COUNTOF(chLines),"_%i_",SendMessage(hwndEdit,SCI_GETLINECOUNT,0,0));
iLineMarginWidthNow = (int)SendMessage(hwndEdit,SCI_GETMARGINWIDTHN,0,0);
iLineMarginWidthNow = (int)SendMessage(hwndEdit,SCI_GETMARGINWIDTHN, MARGIN_NP3_LINENUM, 0);
iLineMarginWidthFit = (int)SendMessage(hwndEdit,SCI_TEXTWIDTH,STYLE_LINENUMBER,(LPARAM)chLines);
if (iLineMarginWidthNow != iLineMarginWidthFit) {
//SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,0,0);
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,0,iLineMarginWidthFit);
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN, MARGIN_NP3_LINENUM, iLineMarginWidthFit);
}
}
else
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN,0,0);
SendMessage(hwndEdit,SCI_SETMARGINWIDTHN, MARGIN_NP3_LINENUM, 0);
}

Binary file not shown.

View File

@ -356,7 +356,7 @@ extern "C" BOOL EditPrint(HWND hwnd,LPCWSTR pszDocTitle,LPCWSTR pszPageFormat)
StartPage(hdc);
SetTextColor(hdc, RGB(0,0,0));
SetBkColor(hdc, RGB(255,255,255));
SetBkColor(hdc, RGB(0xFF, 0xFF, 0xFF));
SelectObject(hdc, fontHeader);
UINT ta = SetTextAlign(hdc, TA_BOTTOM);
RECT rcw = {frPrint.rc.left, frPrint.rc.top - headerLineHeight - headerLineHeight / 2,
@ -400,7 +400,7 @@ extern "C" BOOL EditPrint(HWND hwnd,LPCWSTR pszDocTitle,LPCWSTR pszPageFormat)
if (printPage) {
SetTextColor(hdc, RGB(0,0,0));
SetBkColor(hdc, RGB(255,255,255));
SetBkColor(hdc, RGB(0xFF, 0xFF, 0xFF));
SelectObject(hdc, fontFooter);
UINT ta = SetTextAlign(hdc, TA_TOP);
RECT rcw = {frPrint.rc.left, frPrint.rc.bottom + footerLineHeight / 2,

View File

@ -48,7 +48,6 @@ extern const int FontQuality[4];
extern BOOL bUseOldStyleBraceMatching;
#define MULTI_STYLE(a,b,c,d) ((a)|(b<<8)|(c<<16)|(d<<24))
@ -69,21 +68,44 @@ EDITLEXER lexDefault = { SCLEX_NULL, 63000, L"Default Text", L"txt; text; wtx;
/* 9 */ { SCI_SETCARETFORE+SCI_SETCARETWIDTH, 63109, L"Caret (Color, Size 1-3)", L"", L"" },
/* 10 */ { SCI_SETEDGECOLOUR, 63110, L"Long Line Marker (Colors)", L"fore:#FFC000", L"" },
/* 11 */ { SCI_SETEXTRAASCENT+SCI_SETEXTRADESCENT, 63111, L"Extra Line Spacing (Size)", L"size:2", L"" },
/* 12 */ { SCI_MARKERSETBACK+SCI_MARKERSETALPHA, 63124, L"Book Marks (Colors)", L"back:#00FF00; alpha:20", L"" },
/* 13 */ { STYLE_DEFAULT, 63112, L"2nd Default Style", L"font:Courier New; size:10", L"" },
/* 14 */ { STYLE_LINENUMBER, 63113, L"2nd Margins and Line Numbers", L"font:Tahoma; size:-2; fore:#FF0000", L"" },
/* 15 */ { STYLE_BRACELIGHT, 63114, L"2nd Matching Braces", L"bold; fore:#FF0000", L"" },
/* 16 */ { STYLE_BRACEBAD, 63115, L"2nd Matching Braces Error", L"bold; fore:#000080", L"" },
/* 17 */ { STYLE_CONTROLCHAR, 63116, L"2nd Control Characters (Font)", L"size:-1", L"" },
/* 18 */ { STYLE_INDENTGUIDE, 63117, L"2nd Indentation Guide (Color)", L"fore:#A0A0A0", L"" },
/* 19 */ { SCI_SETSELFORE+SCI_SETSELBACK, 63118, L"2nd Selected Text (Colors)", L"eolfilled", L"" },
/* 20 */ { SCI_SETWHITESPACEFORE+SCI_SETWHITESPACEBACK+SCI_SETWHITESPACESIZE, 63119, L"2nd Whitespace (Colors, Size 0-5)", L"fore:#FF4000", L"" },
/* 21 */ { SCI_SETCARETLINEBACK, 63120, L"2nd Current Line Background (Color)", L"back:#FFFF00; alpha:50", L"" },
/* 22 */ { SCI_SETCARETFORE+SCI_SETCARETWIDTH, 63121, L"2nd Caret (Color, Size 1-3)", L"", L"" },
/* 23 */ { SCI_SETEDGECOLOUR, 63122, L"2nd Long Line Marker (Colors)", L"fore:#FFC000", L"" },
/* 24 */ { SCI_SETEXTRAASCENT+SCI_SETEXTRADESCENT, 63123, L"2nd Extra Line Spacing (Size)", L"", L"" },
/* 25 */ { SCI_MARKERSETBACK+SCI_MARKERSETALPHA, 63125, L"2nd Book Marks (Colors)", L"back:#00FF00; alpha:20", L"" },
/* 12 */ { STYLE_DEFAULT, 63112, L"2nd Default Style", L"font:Courier New; size:10", L"" },
/* 13 */ { STYLE_LINENUMBER, 63113, L"2nd Margins and Line Numbers", L"font:Tahoma; size:-2; fore:#FF0000", L"" },
/* 14 */ { STYLE_BRACELIGHT, 63114, L"2nd Matching Braces", L"bold; fore:#FF0000", L"" },
/* 15 */ { STYLE_BRACEBAD, 63115, L"2nd Matching Braces Error", L"bold; fore:#000080", L"" },
/* 16 */ { STYLE_CONTROLCHAR, 63116, L"2nd Control Characters (Font)", L"size:-1", L"" },
/* 17 */ { STYLE_INDENTGUIDE, 63117, L"2nd Indentation Guide (Color)", L"fore:#A0A0A0", L"" },
/* 18 */ { SCI_SETSELFORE+SCI_SETSELBACK, 63118, L"2nd Selected Text (Colors)", L"eolfilled", L"" },
/* 19 */ { SCI_SETWHITESPACEFORE+SCI_SETWHITESPACEBACK+SCI_SETWHITESPACESIZE, 63119, L"2nd Whitespace (Colors, Size 0-5)", L"fore:#FF4000", L"" },
/* 20 */ { SCI_SETCARETLINEBACK, 63120, L"2nd Current Line Background (Color)", L"back:#FFFF00; alpha:50", L"" },
/* 21 */ { SCI_SETCARETFORE+SCI_SETCARETWIDTH, 63121, L"2nd Caret (Color, Size 1-3)", L"", L"" },
/* 22 */ { SCI_SETEDGECOLOUR, 63122, L"2nd Long Line Marker (Colors)", L"fore:#FFC000", L"" },
/* 23 */ { SCI_SETEXTRAASCENT+SCI_SETEXTRADESCENT, 63123, L"2nd Extra Line Spacing (Size)", L"", L"" },
{ -1, 00000, L"", L"", L"" } } };
enum LexDefaultStyles {
STY_DEFAULT = 0,
STY_MARGIN = 1,
STY_BRACE_OK = 2,
STY_BRACE_BAD = 3,
STY_CTRL_CHR = 4,
STY_INDENT_GUIDE = 5,
STY_SEL_TXT = 6,
STY_WHITESPACE = 7,
STY_CUR_LN_BCK = 8,
STY_CARET = 9,
STY_LONG_LN_MRK = 10,
STY_X_LN_SPACE = 11,
STY_BOOK_MARK = 12,
STY_CNT_LAST = 13 // STY_2ND_XXX = STY_XXX + STY_CNT_LAST
};
KEYWORDLIST KeyWords_HTML = {
"!doctype ^aria- ^data- a abbr accept accept-charset accesskey acronym action address align alink "
"alt and applet archive area article aside async audio autocomplete autofocus autoplay axis b "
@ -2669,8 +2691,25 @@ int iDefaultLexer;
BOOL bAutoSelect;
int cxStyleSelectDlg;
int cyStyleSelectDlg;
extern int iDefaultCharSet;
extern BOOL bHiliteCurrentLine;
extern BOOL bShowSelectionMargin;
//=============================================================================
//
// Style_RgbAlpha()
//
int __fastcall Style_RgbAlpha(int rgbFore, int rgbBack, int alpha)
{
return (int)RGB(\
(0xFF - alpha) * (int)GetRValue(rgbBack) / 0xFF + alpha * (int)GetRValue(rgbFore) / 0xFF, \
(0xFF - alpha) * (int)GetGValue(rgbBack) / 0xFF + alpha * (int)GetGValue(rgbFore) / 0xFF, \
(0xFF - alpha) * (int)GetBValue(rgbBack) / 0xFF + alpha * (int)GetBValue(rgbFore) / 0xFF);
}
//=============================================================================
@ -2719,7 +2758,7 @@ void Style_Load()
LoadIniSection(L"Styles",pIniSection,cchIniSection);
// 2nd default
bUse2ndDefaultStyle = (IniSectionGetInt(pIniSection,L"Use2ndDefaultStyle",0)) ? 1 : 0;
bUse2ndDefaultStyle = (IniSectionGetInt(pIniSection,L"Use2ndDefaultStyle",0)) ? TRUE : FALSE;
// default scheme
iDefaultLexer = IniSectionGetInt(pIniSection,L"DefaultScheme",0);
@ -2916,8 +2955,7 @@ BOOL Style_Export(HWND hwnd)
//
// Style_SetLexer()
//
void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
{
void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) {
int rgb;
int iValue;
int iIdx;
@ -2928,25 +2966,25 @@ void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
pLexNew = pLexArray[iDefaultLexer];
// Lexer
SendMessage(hwnd,SCI_SETLEXER,pLexNew->iLexer,0);
SendMessage(hwnd, SCI_SETLEXER, pLexNew->iLexer, 0);
// deprecated since SCI 3.4.2
//int iStyleBits = (int)SendMessage(hwnd,SCI_GETSTYLEBITSNEEDED,0,0);
//SendMessage(hwnd,SCI_SETSTYLEBITS,(WPARAM)iStyleBits,0);
if (pLexNew->iLexer == SCLEX_XML)
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.xml.allow.scripts",(LPARAM)"1");
SendMessage(hwnd, SCI_SETPROPERTY, (WPARAM)"lexer.xml.allow.scripts", (LPARAM)"1");
if (pLexNew->iLexer == SCLEX_CPP) {
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"styling.within.preprocessor",(LPARAM)"1");
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.cpp.track.preprocessor",(LPARAM)"0");
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.cpp.update.preprocessor",(LPARAM)"0");
SendMessage(hwnd, SCI_SETPROPERTY, (WPARAM)"styling.within.preprocessor", (LPARAM)"1");
SendMessage(hwnd, SCI_SETPROPERTY, (WPARAM)"lexer.cpp.track.preprocessor", (LPARAM)"0");
SendMessage(hwnd, SCI_SETPROPERTY, (WPARAM)"lexer.cpp.update.preprocessor", (LPARAM)"0");
}
else if (pLexNew->iLexer == SCLEX_PASCAL)
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.pascal.smart.highlighting",(LPARAM)"1");
SendMessage(hwnd, SCI_SETPROPERTY, (WPARAM)"lexer.pascal.smart.highlighting", (LPARAM)"1");
else if (pLexNew->iLexer == SCLEX_SQL) {
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"sql.backslash.escapes",(LPARAM)"1");
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.sql.backticks.identifier",(LPARAM)"1");
SendMessage(hwnd,SCI_SETPROPERTY,(WPARAM)"lexer.sql.numbersign.comment",(LPARAM)"1");
SendMessage(hwnd, SCI_SETPROPERTY, (WPARAM)"sql.backslash.escapes", (LPARAM)"1");
SendMessage(hwnd, SCI_SETPROPERTY, (WPARAM)"lexer.sql.backticks.identifier", (LPARAM)"1");
SendMessage(hwnd, SCI_SETPROPERTY, (WPARAM)"lexer.sql.numbersign.comment", (LPARAM)"1");
}
else if (pLexNew->iLexer == SCLEX_NSIS)
SciCall_SetProperty("nsis.ignorecase", "1");
@ -2969,161 +3007,166 @@ void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
// Add KeyWord Lists
for (int i = 0; i < 9; i++)
SendMessage(hwnd,SCI_SETKEYWORDS,i,(LPARAM)pLexNew->pKeyWords->pszKeyWords[i]);
SendMessage(hwnd, SCI_SETKEYWORDS, i, (LPARAM)pLexNew->pKeyWords->pszKeyWords[i]);
// Use 2nd default style
iIdx = (bUse2ndDefaultStyle) ? 12 : 0;
iIdx = (bUse2ndDefaultStyle) ? STY_CNT_LAST : 0;
// Font quality setup, check availability of Consolas
Style_SetFontQuality(hwnd,lexDefault.Styles[0+iIdx].szValue);
Style_SetFontQuality(hwnd, lexDefault.Styles[STY_DEFAULT + iIdx].szValue);
fIsConsolasAvailable = IsFontAvailable(L"Consolas");
// Clear
SendMessage(hwnd,SCI_CLEARDOCUMENTSTYLE,0,0);
SendMessage(hwnd, SCI_CLEARDOCUMENTSTYLE, 0, 0);
// Default Values are always set
SendMessage(hwnd,SCI_STYLERESETDEFAULT,0,0);
SendMessage(hwnd,SCI_STYLESETCHARACTERSET,STYLE_DEFAULT,(LPARAM)DEFAULT_CHARSET);
SendMessage(hwnd, SCI_STYLERESETDEFAULT, 0, 0);
SendMessage(hwnd, SCI_STYLESETCHARACTERSET, STYLE_DEFAULT, (LPARAM)DEFAULT_CHARSET);
iBaseFontSize = 10;
Style_SetStyles(hwnd,lexDefault.Styles[0+iIdx].iStyle,lexDefault.Styles[0+iIdx].szValue); // default
Style_StrGetSize(lexDefault.Styles[0+iIdx].szValue,&iBaseFontSize); // base size
Style_SetStyles(hwnd, lexDefault.Styles[STY_DEFAULT + iIdx].iStyle, lexDefault.Styles[STY_DEFAULT + iIdx].szValue); // default
Style_StrGetSize(lexDefault.Styles[STY_DEFAULT + iIdx].szValue, &iBaseFontSize); // base size
// Auto-select codepage according to charset
//Style_SetACPfromCharSet(hwnd);
if (!Style_StrGetColor(TRUE,lexDefault.Styles[0+iIdx].szValue,&iValue))
SendMessage(hwnd,SCI_STYLESETFORE,STYLE_DEFAULT,(LPARAM)GetSysColor(COLOR_WINDOWTEXT)); // default text color
if (!Style_StrGetColor(FALSE,lexDefault.Styles[0+iIdx].szValue,&iValue))
SendMessage(hwnd,SCI_STYLESETBACK,STYLE_DEFAULT,(LPARAM)GetSysColor(COLOR_WINDOW)); // default window color
if (!Style_StrGetColor(TRUE, lexDefault.Styles[STY_DEFAULT + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_STYLESETFORE, STYLE_DEFAULT, (LPARAM)GetSysColor(COLOR_WINDOWTEXT)); // default text color
if (!Style_StrGetColor(FALSE, lexDefault.Styles[STY_DEFAULT + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_STYLESETBACK, STYLE_DEFAULT, (LPARAM)GetSysColor(COLOR_WINDOW)); // default window color
if (pLexNew->iLexer != SCLEX_NULL || pLexNew == &lexANSI)
Style_SetStyles(hwnd,pLexNew->Styles[0].iStyle,pLexNew->Styles[0].szValue); // lexer default
SendMessage(hwnd,SCI_STYLECLEARALL,0,0);
Style_SetStyles(hwnd, pLexNew->Styles[STY_DEFAULT].iStyle, pLexNew->Styles[STY_DEFAULT].szValue); // lexer default
SendMessage(hwnd, SCI_STYLECLEARALL, 0, 0);
Style_SetStyles(hwnd,lexDefault.Styles[1+iIdx].iStyle,lexDefault.Styles[1+iIdx].szValue); // linenumber
Style_SetStyles(hwnd, lexDefault.Styles[STY_MARGIN + iIdx].iStyle, lexDefault.Styles[STY_MARGIN + iIdx].szValue); // linenumber
if (bUseOldStyleBraceMatching) {
Style_SetStyles(hwnd,lexDefault.Styles[2+iIdx].iStyle,lexDefault.Styles[2+iIdx].szValue); // brace light
Style_SetStyles(hwnd, lexDefault.Styles[STY_BRACE_OK + iIdx].iStyle, lexDefault.Styles[STY_BRACE_OK + iIdx].szValue); // brace light
}
else {
if (Style_StrGetColor(TRUE, lexDefault.Styles[2 + iIdx].szValue, &iValue))
if (Style_StrGetColor(TRUE, lexDefault.Styles[STY_BRACE_OK + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_MATCH_BRACE, iValue);
if (Style_StrGetAlpha(lexDefault.Styles[2 + iIdx].szValue, &iValue))
if (Style_StrGetAlpha(lexDefault.Styles[STY_BRACE_OK + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_MATCH_BRACE, iValue);
}
if (bUseOldStyleBraceMatching) {
Style_SetStyles(hwnd,lexDefault.Styles[3+iIdx].iStyle,lexDefault.Styles[3+iIdx].szValue); // brace bad
Style_SetStyles(hwnd, lexDefault.Styles[STY_BRACE_BAD + iIdx].iStyle, lexDefault.Styles[STY_BRACE_BAD + iIdx].szValue); // brace bad
}
else {
if (Style_StrGetColor(TRUE, lexDefault.Styles[3 + iIdx].szValue, &iValue))
if (Style_StrGetColor(TRUE, lexDefault.Styles[STY_BRACE_BAD + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_BAD_BRACE, iValue);
if (Style_StrGetAlpha(lexDefault.Styles[3 + iIdx].szValue, &iValue))
if (Style_StrGetAlpha(lexDefault.Styles[STY_BRACE_BAD + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_BAD_BRACE, iValue);
}
if (pLexNew != &lexANSI)
Style_SetStyles(hwnd,lexDefault.Styles[4+iIdx].iStyle,lexDefault.Styles[4+iIdx].szValue); // control char
Style_SetStyles(hwnd,lexDefault.Styles[5+iIdx].iStyle,lexDefault.Styles[5+iIdx].szValue); // indent guide
Style_SetStyles(hwnd, lexDefault.Styles[STY_CTRL_CHR + iIdx].iStyle, lexDefault.Styles[STY_CTRL_CHR + iIdx].szValue); // control char
Style_SetStyles(hwnd, lexDefault.Styles[STY_INDENT_GUIDE + iIdx].iStyle, lexDefault.Styles[STY_INDENT_GUIDE + iIdx].szValue); // indent guide
// More default values...
if (Style_StrGetColor(TRUE,lexDefault.Styles[6+iIdx].szValue,&rgb)) { // selection fore
SendMessage(hwnd,SCI_SETSELFORE,TRUE,rgb);
SendMessage(hwnd,SCI_SETADDITIONALSELFORE,rgb,0);
if (Style_StrGetColor(TRUE, lexDefault.Styles[STY_SEL_TXT + iIdx].szValue, &rgb)) { // selection fore
SendMessage(hwnd, SCI_SETSELFORE, TRUE, rgb);
SendMessage(hwnd, SCI_SETADDITIONALSELFORE, rgb, 0);
}
else {
SendMessage(hwnd,SCI_SETSELFORE,0,0);
SendMessage(hwnd,SCI_SETADDITIONALSELFORE,0,0);
SendMessage(hwnd, SCI_SETSELFORE, 0, 0);
SendMessage(hwnd, SCI_SETADDITIONALSELFORE, 0, 0);
}
if (Style_StrGetColor(FALSE,lexDefault.Styles[6+iIdx].szValue,&iValue)) { // selection back
SendMessage(hwnd,SCI_SETSELBACK,TRUE,iValue);
SendMessage(hwnd,SCI_SETADDITIONALSELBACK,iValue,0);
if (Style_StrGetColor(FALSE, lexDefault.Styles[STY_SEL_TXT + iIdx].szValue, &iValue)) { // selection back
SendMessage(hwnd, SCI_SETSELBACK, TRUE, iValue);
SendMessage(hwnd, SCI_SETADDITIONALSELBACK, iValue, 0);
}
else {
SendMessage(hwnd,SCI_SETSELBACK,TRUE,RGB(0xC0,0xC0,0xC0)); // use a default value...
SendMessage(hwnd,SCI_SETADDITIONALSELBACK,RGB(0xC0,0xC0,0xC0),0);
SendMessage(hwnd, SCI_SETSELBACK, TRUE, RGB(0xC0, 0xC0, 0xC0)); // use a default value...
SendMessage(hwnd, SCI_SETADDITIONALSELBACK, RGB(0xC0, 0xC0, 0xC0), 0);
}
if (Style_StrGetAlpha(lexDefault.Styles[6+iIdx].szValue,&iValue)) { // selection alpha
SendMessage(hwnd,SCI_SETSELALPHA,iValue,0);
SendMessage(hwnd,SCI_SETADDITIONALSELALPHA,iValue,0);
if (Style_StrGetAlpha(lexDefault.Styles[STY_SEL_TXT + iIdx].szValue, &iValue)) { // selection alpha
SendMessage(hwnd, SCI_SETSELALPHA, iValue, 0);
SendMessage(hwnd, SCI_SETADDITIONALSELALPHA, iValue, 0);
}
else {
SendMessage(hwnd,SCI_SETSELALPHA,SC_ALPHA_NOALPHA,0);
SendMessage(hwnd,SCI_SETADDITIONALSELALPHA,SC_ALPHA_NOALPHA,0);
SendMessage(hwnd, SCI_SETSELALPHA, SC_ALPHA_NOALPHA, 0);
SendMessage(hwnd, SCI_SETADDITIONALSELALPHA, SC_ALPHA_NOALPHA, 0);
}
if (StrStrI(lexDefault.Styles[6+iIdx].szValue,L"eolfilled")) // selection eolfilled
SendMessage(hwnd,SCI_SETSELEOLFILLED,1,0);
if (StrStrI(lexDefault.Styles[STY_SEL_TXT + iIdx].szValue, L"eolfilled")) // selection eolfilled
SendMessage(hwnd, SCI_SETSELEOLFILLED, 1, 0);
else
SendMessage(hwnd,SCI_SETSELEOLFILLED,0,0);
SendMessage(hwnd, SCI_SETSELEOLFILLED, 0, 0);
if (Style_StrGetColor(TRUE,lexDefault.Styles[7+iIdx].szValue,&rgb)) // whitespace fore
SendMessage(hwnd,SCI_SETWHITESPACEFORE,TRUE,rgb);
if (Style_StrGetColor(TRUE, lexDefault.Styles[STY_WHITESPACE + iIdx].szValue, &rgb)) // whitespace fore
SendMessage(hwnd, SCI_SETWHITESPACEFORE, TRUE, rgb);
else
SendMessage(hwnd,SCI_SETWHITESPACEFORE,0,0);
SendMessage(hwnd, SCI_SETWHITESPACEFORE, 0, 0);
if (Style_StrGetColor(FALSE,lexDefault.Styles[7+iIdx].szValue,&rgb)) // whitespace back
SendMessage(hwnd,SCI_SETWHITESPACEBACK,TRUE,rgb);
if (Style_StrGetColor(FALSE, lexDefault.Styles[STY_WHITESPACE + iIdx].szValue, &rgb)) // whitespace back
SendMessage(hwnd, SCI_SETWHITESPACEBACK, TRUE, rgb);
else
SendMessage(hwnd,SCI_SETWHITESPACEBACK,0,0); // use a default value...
SendMessage(hwnd, SCI_SETWHITESPACEBACK, 0, 0); // use a default value...
// whitespace dot size
iValue = 1;
if (Style_StrGetSize(lexDefault.Styles[7+iIdx].szValue,&iValue)) {
if (Style_StrGetSize(lexDefault.Styles[STY_WHITESPACE + iIdx].szValue, &iValue)) {
WCHAR tch[32] = { L'\0' };
WCHAR wchStyle[BUFSIZE_STYLE_VALUE];
StringCchCopyN(wchStyle,COUNTOF(wchStyle),lexDefault.Styles[7 + iIdx].szValue,COUNTOF(lexDefault.Styles[7 + iIdx].szValue));
StringCchCopyN(wchStyle, COUNTOF(wchStyle), lexDefault.Styles[STY_WHITESPACE + iIdx].szValue, COUNTOF(lexDefault.Styles[STY_WHITESPACE + iIdx].szValue));
iValue = max(min(iValue,5),0);
StringCchPrintf(lexDefault.Styles[7+iIdx].szValue,COUNTOF(lexDefault.Styles[7 + iIdx].szValue),L"size:%i",iValue);
iValue = max(min(iValue, 5), 0);
StringCchPrintf(lexDefault.Styles[STY_WHITESPACE + iIdx].szValue, COUNTOF(lexDefault.Styles[STY_WHITESPACE + iIdx].szValue), L"size:%i", iValue);
if (Style_StrGetColor(TRUE,wchStyle,&rgb)) {
StringCchPrintf(tch,COUNTOF(tch),L"; fore:#%02X%02X%02X",
if (Style_StrGetColor(TRUE, wchStyle, &rgb)) {
StringCchPrintf(tch, COUNTOF(tch), L"; fore:#%02X%02X%02X",
(int)GetRValue(rgb),
(int)GetGValue(rgb),
(int)GetBValue(rgb));
StringCchCat(lexDefault.Styles[7 + iIdx].szValue,COUNTOF(lexDefault.Styles[7 + iIdx].szValue),tch);
StringCchCat(lexDefault.Styles[STY_WHITESPACE + iIdx].szValue, COUNTOF(lexDefault.Styles[STY_WHITESPACE + iIdx].szValue), tch);
}
if (Style_StrGetColor(FALSE,wchStyle,&rgb)) {
StringCchPrintf(tch,COUNTOF(tch),L"; back:#%02X%02X%02X",
if (Style_StrGetColor(FALSE, wchStyle, &rgb)) {
StringCchPrintf(tch, COUNTOF(tch), L"; back:#%02X%02X%02X",
(int)GetRValue(rgb),
(int)GetGValue(rgb),
(int)GetBValue(rgb));
StringCchCat(lexDefault.Styles[7 + iIdx].szValue,COUNTOF(lexDefault.Styles[7 + iIdx].szValue),tch);
StringCchCat(lexDefault.Styles[STY_WHITESPACE + iIdx].szValue, COUNTOF(lexDefault.Styles[STY_WHITESPACE + iIdx].szValue), tch);
}
}
SendMessage(hwnd,SCI_SETWHITESPACESIZE,iValue,0);
SendMessage(hwnd, SCI_SETWHITESPACESIZE, iValue, 0);
if (bHiliteCurrentLine) {
if (Style_StrGetColor(FALSE,lexDefault.Styles[8+iIdx].szValue,&rgb)) // caret line back
if (Style_StrGetColor(FALSE, lexDefault.Styles[STY_CUR_LN_BCK + iIdx].szValue, &rgb)) // caret line back
{
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,TRUE,0);
SendMessage(hwnd,SCI_SETCARETLINEBACK,rgb,0);
SendMessage(hwnd, SCI_SETCARETLINEVISIBLE, TRUE, 0);
SendMessage(hwnd, SCI_SETCARETLINEBACK, rgb, 0);
if (Style_StrGetAlpha(lexDefault.Styles[8+iIdx].szValue,&iValue))
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,iValue,0);
if (Style_StrGetAlpha(lexDefault.Styles[STY_CUR_LN_BCK + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_SETCARETLINEBACKALPHA, iValue, 0);
else
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,SC_ALPHA_NOALPHA,0);
SendMessage(hwnd, SCI_SETCARETLINEBACKALPHA, SC_ALPHA_NOALPHA, 0);
}
else
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
SendMessage(hwnd, SCI_SETCARETLINEVISIBLE, FALSE, 0);
}
else
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,FALSE,0);
SendMessage(hwnd, SCI_SETCARETLINEVISIBLE, FALSE, 0);
// bookmark line or marker
Style_SetCurrentMargin(hwnd, bShowSelectionMargin);
// caret style and width
if (StrStr(lexDefault.Styles[9+iIdx].szValue,L"block")) {
if (StrStr(lexDefault.Styles[STY_CARET + iIdx].szValue,L"block")) {
SendMessage(hwnd,SCI_SETCARETSTYLE,CARETSTYLE_BLOCK,0);
StringCchCopy(wchCaretStyle,COUNTOF(wchCaretStyle),L"block");
}
else {
WCHAR wch[32] = { L'\0' };
iValue = 1;
if (Style_StrGetSize(lexDefault.Styles[9+iIdx].szValue,&iValue)) {
if (Style_StrGetSize(lexDefault.Styles[STY_CARET + iIdx].szValue,&iValue)) {
iValue = max(min(iValue,3),1);
StringCchPrintf(wch,COUNTOF(wch),L"size:%i",iValue);
StringCchCat(wchCaretStyle,COUNTOF(wchCaretStyle),wch);
@ -3131,7 +3174,7 @@ void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
SendMessage(hwnd,SCI_SETCARETSTYLE,CARETSTYLE_LINE,0);
SendMessage(hwnd,SCI_SETCARETWIDTH,iValue,0);
}
if (StrStr(lexDefault.Styles[9+iIdx].szValue,L"noblink")) {
if (StrStr(lexDefault.Styles[STY_CARET + iIdx].szValue,L"noblink")) {
SendMessage(hwnd,SCI_SETCARETPERIOD,(WPARAM)0,0);
if (StringCchLen(wchCaretStyle))
StringCchCat(wchCaretStyle,COUNTOF(wchCaretStyle),L"; ");
@ -3141,7 +3184,7 @@ void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
SendMessage(hwnd,SCI_SETCARETPERIOD,(WPARAM)GetCaretBlinkTime(),0);
// caret fore
if (!Style_StrGetColor(TRUE,lexDefault.Styles[9+iIdx].szValue,&rgb))
if (!Style_StrGetColor(TRUE,lexDefault.Styles[STY_CARET + iIdx].szValue,&rgb))
rgb = GetSysColor(COLOR_WINDOWTEXT);
else {
WCHAR wch[32] = { L'\0' };
@ -3157,27 +3200,27 @@ void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
rgb = (int)SendMessage(hwnd,SCI_STYLEGETFORE,0,0);
SendMessage(hwnd,SCI_SETCARETFORE,rgb,0);
SendMessage(hwnd,SCI_SETADDITIONALCARETFORE,rgb,0);
StringCchCopy(lexDefault.Styles[9 + iIdx].szValue,COUNTOF(lexDefault.Styles[9 + iIdx].szValue),wchCaretStyle);
StringCchCopy(lexDefault.Styles[STY_CARET + iIdx].szValue,COUNTOF(lexDefault.Styles[STY_CARET + iIdx].szValue),wchCaretStyle);
if (SendMessage(hwnd,SCI_GETEDGEMODE,0,0) == EDGE_LINE) {
if (Style_StrGetColor(TRUE,lexDefault.Styles[10+iIdx].szValue,&rgb)) // edge fore
if (Style_StrGetColor(TRUE,lexDefault.Styles[STY_LONG_LN_MRK + iIdx].szValue,&rgb)) // edge fore
SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
else
SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
}
else {
if (Style_StrGetColor(FALSE,lexDefault.Styles[10+iIdx].szValue,&rgb)) // edge back
if (Style_StrGetColor(FALSE,lexDefault.Styles[STY_LONG_LN_MRK + iIdx].szValue,&rgb)) // edge back
SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
else
SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
}
// Extra Line Spacing
if (Style_StrGetSize(lexDefault.Styles[11+iIdx].szValue,&iValue) && pLexNew != &lexANSI) {
if (Style_StrGetSize(lexDefault.Styles[STY_X_LN_SPACE + iIdx].szValue,&iValue) && pLexNew != &lexANSI) {
int iAscent = 0;
int iDescent = 0;
iValue = min(max(iValue,0),64);
StringCchPrintf(lexDefault.Styles[11+iIdx].szValue,COUNTOF(lexDefault.Styles[11 + iIdx].szValue),L"size:%i",iValue);
StringCchPrintf(lexDefault.Styles[STY_X_LN_SPACE + iIdx].szValue,COUNTOF(lexDefault.Styles[STY_X_LN_SPACE + iIdx].szValue),L"size:%i",iValue);
if (iValue % 2) {
iAscent++;
iValue--;
@ -3190,7 +3233,7 @@ void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
else {
SendMessage(hwnd,SCI_SETEXTRAASCENT,0,0);
SendMessage(hwnd,SCI_SETEXTRADESCENT,0,0);
//wsprintf(lexDefault.Styles[11+iIdx].szValue,L"size:0");
//wsprintf(lexDefault.Styles[STY_X_LN_SPACE + iIdx].szValue,L"size:0");
}
{ // set folding style; braces are for scoping only
static const int iMarkerIDs[] =
@ -3341,16 +3384,16 @@ void Style_SetLongLineColors(HWND hwnd)
int rgb;
// Use 2nd default style
int iIdx = (bUse2ndDefaultStyle) ? 12 : 0;
int iIdx = (bUse2ndDefaultStyle) ? STY_CNT_LAST : 0;
if (SendMessage(hwnd,SCI_GETEDGEMODE,0,0) == EDGE_LINE) {
if (Style_StrGetColor(TRUE,lexDefault.Styles[10+iIdx].szValue,&rgb)) // edge fore
if (Style_StrGetColor(TRUE,lexDefault.Styles[STY_LONG_LN_MRK + iIdx].szValue,&rgb)) // edge fore
SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
else
SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
}
else {
if (Style_StrGetColor(FALSE,lexDefault.Styles[10+iIdx].szValue,&rgb)) // edge back
if (Style_StrGetColor(FALSE,lexDefault.Styles[STY_LONG_LN_MRK + iIdx].szValue,&rgb)) // edge back
SendMessage(hwnd,SCI_SETEDGECOLOUR,rgb,0);
else
SendMessage(hwnd,SCI_SETEDGECOLOUR,GetSysColor(COLOR_3DLIGHT),0);
@ -3365,18 +3408,18 @@ void Style_SetLongLineColors(HWND hwnd)
void Style_SetCurrentLineBackground(HWND hwnd)
{
// Use 2nd default style
int iIdx = (bUse2ndDefaultStyle) ? 12 : 0;
int iIdx = (bUse2ndDefaultStyle) ? STY_CNT_LAST : 0;
if (bHiliteCurrentLine) {
int rgb = 0;
if (Style_StrGetColor(FALSE,lexDefault.Styles[8+iIdx].szValue,&rgb)) // caret line back
if (Style_StrGetColor(FALSE,lexDefault.Styles[STY_CUR_LN_BCK + iIdx].szValue,&rgb)) // caret line back
{
SendMessage(hwnd,SCI_SETCARETLINEVISIBLE,TRUE,0);
SendMessage(hwnd,SCI_SETCARETLINEBACK,rgb,0);
int iValue = 0;
if (Style_StrGetAlpha(lexDefault.Styles[8+iIdx].szValue,&iValue))
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,iValue,0);
int alpha = 0;
if (Style_StrGetAlpha(lexDefault.Styles[STY_CUR_LN_BCK + iIdx].szValue,&alpha))
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,alpha,0);
else
SendMessage(hwnd,SCI_SETCARETLINEBACKALPHA,SC_ALPHA_NOALPHA,0);
}
@ -3388,6 +3431,46 @@ void Style_SetCurrentLineBackground(HWND hwnd)
}
//=============================================================================
//
// Style_SetCurrentMargin()
//
void Style_SetCurrentMargin(HWND hwnd, BOOL bShowSelMargin) {
int iIdx = (bUse2ndDefaultStyle) ? STY_CNT_LAST : 0;
int alpha = 20;
Style_StrGetAlpha(lexDefault.Styles[STY_BOOK_MARK + iIdx].szValue, &alpha);
int rgbFore = RGB(0xFF, 0, 0); // red
Style_StrGetColor(TRUE, lexDefault.Styles[STY_BOOK_MARK + iIdx].szValue, &rgbFore);
int rgbBack = RGB(0, 0xFF, 0); // green
Style_StrGetColor(FALSE, lexDefault.Styles[STY_BOOK_MARK + iIdx].szValue, &rgbBack);
// adjust background color by alpha in case of show margin
if (bShowSelMargin) {
//int bckgrnd = (int)SendMessage(hwnd, SCI_GETMARGINBACKN, MARGIN_NP3_BOOKMRK, 0);
int bckgrnd = RGB(0xF0, 0xF0, 0xF0);
Style_StrGetColor(FALSE, lexDefault.Styles[STY_MARGIN + iIdx].szValue, &bckgrnd);
rgbBack = Style_RgbAlpha(rgbBack, bckgrnd, min(0xFF, alpha + 50));
}
SendMessage(hwnd, SCI_MARKERSETFORE, MARKER_NP3_BOOKMARK, rgbFore);
SendMessage(hwnd, SCI_MARKERSETBACK, MARKER_NP3_BOOKMARK, rgbBack);
SendMessage(hwnd, SCI_MARKERSETALPHA, MARKER_NP3_BOOKMARK, alpha);
// Depending on if the margin is visible or not, choose different bookmark indication
if (bShowSelMargin) {
SendMessage(hwnd, SCI_MARKERDEFINE, MARKER_NP3_BOOKMARK, SC_MARK_BOOKMARK);
}
else {
SendMessage(hwnd, SCI_MARKERDEFINE, MARKER_NP3_BOOKMARK, SC_MARK_BACKGROUND);
}
//SendMessage(hwndEdit, SCI_SETMARGINWIDTHN, 2, 0);
SendMessage(hwnd, SCI_SETMARGINWIDTHN, MARGIN_NP3_BOOKMRK, (bShowSelMargin) ? 16 : 0);
}
//=============================================================================
//
// Style_SniffShebang()
@ -3686,7 +3769,7 @@ void Style_SetLexerFromID(HWND hwnd,int id)
//
void Style_ToggleUse2ndDefault(HWND hwnd)
{
bUse2ndDefaultStyle = (bUse2ndDefaultStyle) ? 0 : 1;
bUse2ndDefaultStyle = (bUse2ndDefaultStyle) ? FALSE : TRUE;
Style_SetLexer(hwnd,pLexCurrent);
}
@ -3697,10 +3780,10 @@ void Style_ToggleUse2ndDefault(HWND hwnd)
//
void Style_SetDefaultFont(HWND hwnd)
{
int iIdx = (bUse2ndDefaultStyle) ? 12 : 0;
int iIdx = (bUse2ndDefaultStyle) ? STY_CNT_LAST : 0;
if (Style_SelectFont(hwnd,
lexDefault.Styles[0+iIdx].szValue,
COUNTOF(lexDefault.Styles[0].szValue),
lexDefault.Styles[STY_DEFAULT + iIdx].szValue,
COUNTOF(lexDefault.Styles[STY_DEFAULT].szValue),
TRUE)) {
fStylesModified = TRUE;
Style_SetLexer(hwnd,pLexCurrent);
@ -4962,7 +5045,6 @@ INT_PTR CALLBACK Style_ConfigDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lP
if (!GetDlgItemText(hwnd,IDC_STYLEEDIT,pCurrentLexer->szExtensions,COUNTOF(pCurrentLexer->szExtensions)))
StringCchCopy(pCurrentLexer->szExtensions,COUNTOF(pCurrentLexer->szExtensions),pCurrentLexer->pszDefExt);
}
Style_SetLexer(hwndEdit,pLexCurrent);
UpdateLineNumberWidth();
}

View File

@ -19,6 +19,9 @@
#define BUFSIZE_STYLE_VALUE 256
#define BUFZIZE_STYLE_EXTENTIONS 512
#define MARGIN_NP3_LINENUM 0
#define MARGIN_NP3_BOOKMRK 1
typedef struct _editstyle
{
#pragma warning(disable : 4201) // MS's Non-Std: Struktur/Union ohne Namen
@ -66,6 +69,7 @@ BOOL Style_Export(HWND);
void Style_SetLexer(HWND,PEDITLEXER);
void Style_SetLongLineColors(HWND);
void Style_SetCurrentLineBackground(HWND);
void Style_SetCurrentMargin(HWND, BOOL);
void Style_SetLexerFromFile(HWND,LPCWSTR);
void Style_SetLexerFromName(HWND,LPCWSTR,LPCWSTR);
void Style_SetDefaultLexer(HWND);