This is useful for locating faulty brace (paren, etc) placement when writing code.
When a brace is encountered, and it has a match, the brace(s) will be enclosed in
green colored boxes. If there is no matching brace, the offending brace will be
enclosed in a red box. The code responds to: () [] {} <>.
First, paste the following block of code in
CSED.BAS, function: CSED_MDIWindowProc, CASE %WM_CREATE
just above the * EXIT FUNCTION * statement:
' Add Brace Highlighting Functionality:
' Refer to: CSED_SCI.INC, sub: CSED_ShowLinCol
' First, we set the style of the indicator number we want to use to the Box style
SendMessage hEdit, %SCI_INDICSETSTYLE, 8, %INDIC_BOX
' Then, we make that indicator the current one
SendMessage hEdit, %SCI_SETINDICATORCURRENT, 8, 0
' Lastly, we apply the indicator (in this case), to a single char
SendMessage hEdit, %SCI_BRACEHIGHLIGHTINDICATOR, 1, 8 ' use indicator for SCI_BRACEHIGHLIGHTINDICATOR...
SendMessage hEdit, %SCI_BRACEBADLIGHTINDICATOR, 1, 8 ' and SCI_BRACEBADLIGHTINDICATOR
Then, paste the following block of code in
CSED_SCI.INC, sub: CSED_ShowLinCol
just above the * END SUB * statement:
' Refer to CSED.BAS, function: CSED_MDIWindowProc, CASE %WM_CREATE
SELECT CASE SendMessage(pSed.hEdit, %SCI_GETCHARAT, curPos, 0)
CASE 40, 41, 60, 62, 91, 93, 123, 125 ' () <> [] {}
endPos = SendMessage(pSed.hEdit, %SCI_BRACEMATCH, curPos, 0)
IF endPos < 0 THEN ' No match
SendMessage pSed.hEdit, %SCI_INDICSETFORE, 8, %RED
SendMessage pSed.hEdit, %SCI_BRACEBADLIGHT, curPos, 0
ELSE ' Have match
SendMessage pSed.hEdit, %SCI_INDICSETFORE, 8, %GREEN
SendMessage pSed.hEdit, %SCI_BRACEHIGHLIGHT, curPos, endPos
END IF
CASE ELSE ' Clear any Brace Highlighting
SendMessage pSed.hEdit, %SCI_BRACEHIGHLIGHT, %FALSE, %FALSE
END SELECT
You may want to consider adding this as an option in a future release of CSED, Jose.
EDIT:
Some fixes/enhancements.
An annoying green rectangle would appear at line 0, position 0 in the document.
In the 2nd block of code -
Replace: SendMessage pSed.hEdit, %SCI_BRACEHIGHLIGHT, %FALSE, %FALSE
With: SendMessage pSed.hEdit, %SCI_BRACEHIGHLIGHT, %INVALID_POSITION, %INVALID_POSITION
The markers were difficult to see. In the 1st block of code-
Replace: SendMessage hEdit, %SCI_INDICSETSTYLE, 8, %INDIC_BOX
With: SendMessage hEdit, %SCI_INDICSETSTYLE, 8, %INDIC_STRAIGHTBOX
Add these two lines of code after the last line:
SendMessage hEdit, %SCI_INDICSETOUTLINEALPHA, 8, 255 ' transparency of outline
SendMessage hEdit, %SCI_INDICSETALPHA, 8, 127 ' transparency of interior
Adjust the values to your liking.