سلام
کد مرتب سازی خطوط سوزس کد Visual Basic:
Screenshot 2025-01-11 024739.jpg
متغیر های عمومی کلاس:
Dim LineIndent As Integer = 0
Dim BeginKeyWordList As String() = {
"Function", "Sub",
"Namespace", "Class", "Module", "Structure",
"Interface", "Property"}
Dim EndKeyWordList As String() = {"End Function", "End Sub",
"Loop", "Next", "End Namespace", "End Class", "End Module", "End Structure",
"End Interface", "End Property", "End With",
"End Select", "End If"}
Dim StartWithsKeywords As String() = {"Do", "For",
"If", "Select Case", "Case", "With"}
متود ایجاد متن سورس کد و مرتب سازی خطوط:
Sub SetText(Value As String())
Dim Expr As String = My.Resources.Blank_html
With Me.WebBrowser1
.DocumentText =
My.Resources.Blank_html
Do Until .ReadyState = WebBrowserReadyState.Complete
Application.DoEvents()
Loop
For i = 0 To Value.Length - 1
Dim V As String = Value(i).Trim
If LineIndent > 0 Then
For Each Item As String In EndKeyWordList
If V.ContainsKeywords(Item) Then
Debug.Print("Item: {0}", Item)
LineIndent -= 1
If Item = "End Select" Then LineIndent -= 1
End If
Next
End If
If i = Value.Length - 1 Then LineIndent = 0
Dim Value_ As String =
String.Format("{0}{1}",
StrDup((LineIndent), " "), V)
If LineIndent >= 0 Then
For Each Item As String In BeginKeyWordList
If V.ContainsKeywordsBut(ExcludeWord:="End", Item) Then
LineIndent += 1
End If
Next
For Each W As String In StartWithsKeywords
Select Case W
Case "If"
If (V.StartsWith("If ",
StringComparison.OrdinalIgnoreCase) = False Or
V.StartsWith("If ",
StringComparison.OrdinalIgnoreCase)) AndAlso
V.EndsWith(" Then", StringComparison.OrdinalIgnoreCase) Then
LineIndent += 1
End If
Continue For
End Select
If V.StartsWith(W) Then
LineIndent += 1
End If
Next
End If
VisualBasic.HighlightComments(Value_)
VisualBasic.Highlight(Value_)
SharedHighlight.HighLightStrings(Value_)
NewLine(i + 1, Value_)
Next
End With
End Sub
و متود چاپ هر خط در HTML:
Function NewLine(LineNumber As Integer, Text As String) As HtmlElement
With Me.WebBrowser1.Document
Dim LinesTable As HtmlElement = .GetElementById("Lines")
Dim Row As HtmlElement = .CreateElement("tr")
Dim TR As mshtml.HTMLTableRow = .CreateElement("tr").DomElement
Dim TD As mshtml.HTMLTableCell = .CreateElement("td").DomElement
TD.innerHTML = LineNumber.ToString
TD.className = "Column1"
TR.AppendChild(TD)
TD = .CreateElement("td").DomElement
TD.innerHTML = Text
TD.className = "Column2"
TR.appendChild(TD)
Row.InnerHtml = TR.innerHTML
LinesTable.AppendChild(Row)
Return Row
End With
End Function
Imports System.Runtime.CompilerServices
Public Module ExtensionMethods
''' <summary>
''' Returns True when all values exists at InputText, otherwise false.
''' </summary>
''' <param name="InputText"></param>
''' <param name="values"></param>
''' <returns></returns>
<Extension>
Public Function ContainsKeywords(InputText As String, ParamArray values() As String) As Boolean
Dim StartIndex, Index, BeginIndex As Integer
Dim ExcludeChars() As String = {"(", "'", Chr(34)}
For Each C As Char In ExcludeChars
Index = InStr(InputText, C)
If Index <= 0 Then Continue For
StartIndex = Index
If BeginIndex <= StartIndex Then
BeginIndex = StartIndex
End If
Next
If StartIndex <= 0 Then StartIndex = (InputText.Length - 1)
For Each Value As String In values
Index = InStr(InputText.Substring(0, StartIndex + 1), Value)
If Index <= 0 Then Return False
Next
Return True
End Function
''' <summary>
''' Returns True when all values exists at InputText but ExcludeWord, otherwise false.
''' </summary>
''' <param name="InputText"></param>
''' <param name="ExcludeWord"></param>
''' <param name="values"></param>
''' <returns></returns>
<Extension>
Public Function ContainsKeywordsBut(InputText As String, ExcludeWord As String, ParamArray values() As String) As Boolean
Dim Index As Integer = InStr(InputText, ExcludeWord)
If Index > 0 Then Return False
Dim StartIndex, BeginIndex As Integer
Dim ExcludeChars() As String = {"(", "'", Chr(34)}
For Each C As Char In ExcludeChars
Index = InStr(InputText, C)
If Index <= 0 Then Continue For
StartIndex = Index
If BeginIndex <= StartIndex Then
BeginIndex = StartIndex
End If
Next
If StartIndex <= 0 Then StartIndex = (InputText.Length - 1)
For Each Value As String In values
Index = InputText.Substring(0, StartIndex + 1).
Contains(Value)
If Index = False Then Return False
Next
Return True
End Function
End Module