ScintillaNET 未显示方法块的折叠
ScintillaNET not showing folding for method blocks
我正在使用 ScinctillaNET 编辑器,我遇到的问题是它不显示“[+]”和“[- ] 方法的折叠符号,至少对于 Vb.Net 词法分析器,如图所示:
(注意行号 6 和 32 中缺少的符号)
我不确定是作者包装器的设计问题,还是我的错,这是我正在构建的样式,写在 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
该行为似乎是本机 Scintilla 中的 "feature",而不仅仅是 .NET 包装器。它也可以在 SciTE 编辑器中看到。我发现这个 VB-folding-related bug report,它被重新分类为功能请求。它于 2013 年提交,涉及 VB6,但似乎适用。它声明 VB 文件夹基于 缩进 ,而不是语法。
使用您提供的样式,我能够重现您描述的问题。一旦每个嵌套行(即使是空白行)至少出现一个 space 缩进,折叠就会按预期出现。
我正在使用 ScinctillaNET 编辑器,我遇到的问题是它不显示“[+]”和“[- ] 方法的折叠符号,至少对于 Vb.Net 词法分析器,如图所示:
(注意行号 6 和 32 中缺少的符号)
我不确定是作者包装器的设计问题,还是我的错,这是我正在构建的样式,写在 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
该行为似乎是本机 Scintilla 中的 "feature",而不仅仅是 .NET 包装器。它也可以在 SciTE 编辑器中看到。我发现这个 VB-folding-related bug report,它被重新分类为功能请求。它于 2013 年提交,涉及 VB6,但似乎适用。它声明 VB 文件夹基于 缩进 ,而不是语法。
使用您提供的样式,我能够重现您描述的问题。一旦每个嵌套行(即使是空白行)至少出现一个 space 缩进,折叠就会按预期出现。