Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ScintillaNET not showing folding for method blocks

I'm using the ScinctillaNET editor, and, the problem I have is that it does not show the "[+]" and the "[-] folding symbols for methods, at least for the Vb.Net lexer as shown in this image:

( notice the missing symbol in line number 6 and 32 ) enter image description here

I'm not sure I'f its a design issue in the wrapper by the author, or its my fault, this is the style that I'm building, written in Vb.Net:

Public Shared Sub SetVbNetStyle(ByVal editor As Scintilla)

    Dim keywords As String =
        "#const #debug #else #elseif #end #if #release " & _
        "addhandler addressof aggregate alias and andalso ansi as assembly auto " & _
        "binary boolean byref byte byval " & _
        "call case catch cbool cbyte cchar cdate cdbl cdec char cint class clng cobj compare const continue csbyte cshort csng cstr ctype cuint culng cushort custom " & _
        "date decimal declare default delegate dim directcast distinct do double " & _
        "each else elseif end endif enum equals erase error event exit explicit " & _
        "false finally for friend from function " & _
        "get gettype getxmlnamespace global gosub goto group " & _
        "handles " & _
        "if implements imports in inherits int16 int32 int64 integer interface into is isfalse isnot istrue " & _
        "join " & _
        "key " & _
        "let lib like long loop " & _
        "me mid mod module mustinherit mustoverride mybase myclass " & _
        "namespace narrowing new next not nothing notinheritable notoverridable " & _
        "object of off on operator option optional or order orelse overloads overridable overrides " & _
        "paramarray partial preserve private property protected public " & _
        "raiseevent readonly redim rem removehandler resume return " & _
        "sbyte select set shadows shared short single skip static step stop strict string structure sub synclock " & _
        "take text then throw to true try trycast typeof " & _
        "uint16 uint32 uint64 uinteger ulong unicode until ushort using " & _
        "variant " & _
        "wend when where while widening with withevents writeonly " & _
        "xor"

    ' Reset the styles.
    editor.StyleResetDefault()
    editor.StyleClearAll()
    ' editor.Styles(Style.[Default]).Font = "Consolas"
    ' editor.Styles(Style.[Default]).Size = 10

    ' Set the Vb.Net lexer.
    editor.Lexer = Lexer.Vb

    ' Set folding properties.
    editor.SetProperty("tab.timmy.whinge.level", "1")
    editor.SetProperty("fold", "1")

    ' Set the margin for fold markers.
    With editor
        .Margins(2).Type = MarginType.Symbol
        .Margins(2).Mask = Marker.MaskFolders
        .Margins(2).Sensitive = True
        .Margins(2).Width = 20
    End With

    ' Reset folder markers.
    For i As Integer = Marker.FolderEnd To Marker.FolderOpen
        editor.Markers(i).SetForeColor(SystemColors.ControlLightLight)
        editor.Markers(i).SetBackColor(SystemColors.ControlDark)
    Next

    ' Set the style of the folder markers.
    With editor
        .Markers(Marker.Folder).Symbol = MarkerSymbol.BoxPlus
        .Markers(Marker.Folder).SetBackColor(SystemColors.ControlText)
        .Markers(Marker.FolderOpen).Symbol = MarkerSymbol.BoxMinus
        .Markers(Marker.FolderEnd).Symbol = MarkerSymbol.BoxPlusConnected
        .Markers(Marker.FolderEnd).SetBackColor(SystemColors.ControlText)
        .Markers(Marker.FolderMidTail).Symbol = MarkerSymbol.TCorner
        .Markers(Marker.FolderOpenMid).Symbol = MarkerSymbol.BoxMinusConnected
        .Markers(Marker.FolderSub).Symbol = MarkerSymbol.VLine
        .Markers(Marker.FolderTail).Symbol = MarkerSymbol.LCorner
    End With

    ' Enable automatic folding
    editor.AutomaticFold = (AutomaticFold.Show Or AutomaticFold.Click Or AutomaticFold.Change)

    ' Disable whitespaces visibility.
    editor.ViewWhitespace = WhitespaceMode.Invisible

    ' Set the style of the Vb.Net language.
    With editor
        .Styles(Style.Default).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Comment).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Comment).ForeColor = Color.FromArgb(255, 87, 159, 56)
        .Styles(Style.Vb.Comment).Italic = False
        .Styles(Style.Vb.CommentBlock).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.CommentBlock).ForeColor = Color.FromArgb(127, 127, 127)
        .Styles(Style.Vb.CommentBlock).Italic = True
        .Styles(Style.Vb.Default).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Default).ForeColor = Color.FromArgb(128, 128, 128)
        .Styles(Style.Vb.HexNumber).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.HexNumber).Bold = True
        .Styles(Style.Vb.HexNumber).ForeColor = Color.FromArgb(255, 181, 206, 168)
        .Styles(Style.Vb.Identifier).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Identifier).ForeColor = Color.Gainsboro
        .Styles(Style.Vb.Keyword).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Keyword).Bold = False
        .Styles(Style.Vb.Keyword).ForeColor = Color.FromArgb(255, 54, 139, 214)
        .Styles(Style.Vb.Keyword2).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Keyword2).Bold = False
        .Styles(Style.Vb.Keyword2).ForeColor = Color.FromArgb(255, 54, 139, 214)
        .Styles(Style.Vb.Keyword3).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Keyword3).Bold = False
        .Styles(Style.Vb.Keyword3).ForeColor = Color.FromArgb(255, 54, 139, 214)
        .Styles(Style.Vb.Keyword4).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Keyword4).Bold = False
        .Styles(Style.Vb.Keyword4).ForeColor = Color.FromArgb(255, 54, 139, 214)
        .Styles(Style.Vb.Number).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Number).Bold = True
        .Styles(Style.Vb.Number).ForeColor = Color.FromArgb(255, 181, 206, 168)
        .Styles(Style.Vb.Operator).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Operator).Bold = True
        .Styles(Style.Vb.Operator).ForeColor = Color.Silver
        .Styles(Style.Vb.Preprocessor).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.Preprocessor).ForeColor = Color.MediumOrchid
        .Styles(Style.Vb.String).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.String).ForeColor = Color.FromArgb(255, 214, 157, 133)
        .Styles(Style.Vb.StringEol).BackColor = Color.FromArgb(255, 30, 30, 30)
        .Styles(Style.Vb.StringEol).FillLine = True
        .Styles(Style.Vb.StringEol).ForeColor = Color.Gainsboro
    End With

    ' Set the Vb.Net keywords.
    editor.SetKeywords(1, keywords)


End Sub
like image 898
ElektroStudios Avatar asked Oct 30 '22 08:10

ElektroStudios


1 Answers

The behavior appears to be a "feature" in native Scintilla, not just the .NET wrapper. It can also be seen in the SciTE editor. I found this VB-folding-related bug report, which was reclassified as a feature request. It was submitted in 2013, regarding VB6, but appears to be applicable. It states that the VB folder is based on indentation, not syntax.

Using your provided style, I was able to replicate your described issue. Once at least one space indentation was present on each nested line, even the blank lines, the folding appeared as expected.

like image 67
cokeman19 Avatar answered Nov 15 '22 06:11

cokeman19