VB语法着色器
历经N天完成的作品,和大家分享一下.本作品主使用了以下技术:
1.VB语法着色(核心功能,绝对原创)
2.监视剪贴板并自动替换(部分参考网络文章)
3.智能分析是否VB代码(原创,不过这个功能写的比较简单,所以智能程度不够,只是意思意思而已)
4.全局热键(部分参考网络文章)
5.托盘图标及Explorer崩溃后重建任务栏图标(部分参考网络文章)
6.一个封装了INI文件读写的类(原创)
7.自定义着色方案,支持着色方案导入导出(也算原创吧,不过这个没啥技术含量)
先来张图
[attach]35403[/attach]
下边是源码
[attach]35404[/attach]
压缩包内的CodeStyle文件夹内已经放了一个UBB的着色方案
希望大家提点意见
等静哥审核通过后再来几段效果代码
太谦虚啦! 不错不错 支持版主! 看看效果
[color=Gray]'VB语法高亮(by 永夜的极光) V1.03[/color]
[color=Green]Option Explicit
Private Type[/color] Record
Pos [color=Green]As Integer[/color]
iType [color=Green]As Integer
End Type
Private[/color] Rec[color=Magenta]()[/color] [color=Green]As[/color] Record
[color=Green]Private[/color] RecCount [color=Green]As Integer
Private[/color] RecMax [color=Green]As Integer
Private[/color] aWord[color=Magenta]$(),[/color] aLine[color=Magenta]$()[/color]
[color=Green]Public Function[/color] isKeyWord[color=Magenta]([/color]str [color=Green]As String[color=Magenta])[/color] As Boolean
Dim[/color] i[color=Magenta]%[/color]
[color=Green]For[/color] i [color=Magenta]= [color=Blue]0[/color] [color=Green]To[/color] [color=MediumTurquoise]UBound[/color]([/color]aKeyWord[color=Magenta])
[color=Green]If[/color] [color=MediumTurquoise]StrComp[/color]([/color]str[color=Magenta],[/color] aKeyWord[color=Magenta]([/color]i[color=Magenta]),[/color] vbTextCompare[color=Magenta]) =[/color] [color=Blue]0[/color] [color=Green]Then[/color]
isKeyWord [color=Magenta]=[/color] [color=Green]True
Exit Function
End If
Next[/color]
isKeyWord [color=Magenta]=[/color] [color=Green]False
End Function
Public Function[/color] isSymbol[color=Magenta]([/color]str [color=Green]As String[color=Magenta])[/color] As Boolean
Dim[/color] i[color=Magenta]%[/color]
[color=Green]For[/color] i [color=Magenta]= [color=Blue]0[/color] [color=Green]To[/color] [color=MediumTurquoise]UBound[/color]([/color]aSymbol[color=Magenta])
[color=Green]If[/color] [color=MediumTurquoise]StrComp[/color]([/color]str[color=Magenta],[/color] aSymbol[color=Magenta]([/color]i[color=Magenta]),[/color] vbTextCompare[color=Magenta]) =[/color] [color=Blue]0[/color] [color=Green]Then[/color]
isSymbol [color=Magenta]=[/color] [color=Green]True
Exit Function
End If
Next[/color]
isSymbol [color=Magenta]=[/color] [color=Green]False
End Function
Public Function[/color] isFunction[color=Magenta]([/color]str [color=Green]As String[color=Magenta])[/color] As Boolean
Dim[/color] i[color=Magenta]%[/color]
[color=Green]For[/color] i [color=Magenta]= [color=Blue]0[/color] [color=Green]To[/color] [color=MediumTurquoise]UBound[/color]([/color]aFunction[color=Magenta])
[color=Green]If[/color] [color=MediumTurquoise]StrComp[/color]([/color]str[color=Magenta],[/color] aFunction[color=Magenta]([/color]i[color=Magenta]),[/color] vbTextCompare[color=Magenta]) =[/color] [color=Blue]0[/color] [color=Green]Then[/color]
isFunction [color=Magenta]=[/color] [color=Green]True
Exit Function
End If
Next[/color]
isFunction [color=Magenta]=[/color] [color=Green]False
End Function
Public Function[/color] Encode[color=Magenta]([/color]str [color=Green]As String[color=Magenta])[/color] As String
If[/color] str [color=Magenta]=[/color] [color=DarkOliveGreen]""[/color] [color=Green]Then Exit Function[/color]
ScanRTB str
[color=Green]Dim[/color] s[color=Magenta]$,[/color] i[color=Magenta]%,[/color] j[color=Magenta]%,[/color] tmpS
s [color=Magenta]= [color=MediumTurquoise]Left[/color]([/color]str[color=Magenta],[/color] Rec[color=Magenta]([color=Blue]0[/color]).[/color]Pos [color=Magenta]- [color=Blue]1[/color])[/color]
[color=Green]If[/color] CodeType [color=Magenta]=[/color] HTML [color=Green]Then[/color] s [color=Magenta]=[/color] Replace[color=Magenta]([/color]Replace[color=Magenta]([/color]Replace[color=Magenta]([/color]s[color=Magenta], [color=DarkOliveGreen]"<"[/color], [color=DarkOliveGreen]"<"[/color]),[/color] vbCrLf[color=Magenta], [color=DarkOliveGreen]"<br>"[/color] &[/color] vbCrLf[color=Magenta]), [color=DarkOliveGreen]" "[/color], [color=DarkOliveGreen]" "[/color])[/color]
[color=Green]For[/color] i [color=Magenta]=[/color] [color=Blue]0[/color] [color=Green]To[/color] RecCount [color=Magenta]-[/color] [color=Blue]1[/color]
[color=Green]If[/color] Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType [color=Magenta]>=[/color] [color=Blue]0[/color] [color=Green]Then
If[/color] i Mod [color=Blue]2 [color=Magenta]=[/color] 1[/color] [color=Green]Then[/color]
s [color=Magenta]=[/color] s [color=Magenta]& [color=MediumTurquoise]IIf[/color]([/color]Code[color=Magenta]([/color]Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType[color=Magenta]).[/color]Enable[color=Magenta],[/color] Code[color=Magenta]([/color]Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType[color=Magenta]).[color=Green]End[/color], [color=DarkOliveGreen]""[/color])[/color]
[color=Green]Else[/color]
s [color=Magenta]=[/color] s [color=Magenta]& [color=MediumTurquoise]IIf[/color]([/color]Code[color=Magenta]([/color]Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType[color=Magenta]).[/color]Enable[color=Magenta],[/color] Code[color=Magenta]([/color]Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType[color=Magenta]).[/color]Start[color=Magenta], [color=DarkOliveGreen]""[/color])[/color]
[color=Green]End If[/color]
j [color=Magenta]=[/color] i
[color=Green]While[/color] Rec[color=Magenta]([/color]i [color=Magenta]+ [color=Blue]1[/color]).[/color]iType [color=Magenta]<[/color] [color=Blue]0[/color]
i [color=Magenta]=[/color] i [color=Magenta]+[/color] [color=Blue]1[/color]
[color=Green]Wend[/color]
tmpS [color=Magenta]= [color=MediumTurquoise]Mid[/color]([/color]str[color=Magenta],[/color] Rec[color=Magenta]([/color]j[color=Magenta]).[/color]Pos[color=Magenta],[/color] Rec[color=Magenta]([/color]i [color=Magenta]+ [color=Blue]1[/color]).[/color]Pos [color=Magenta]-[/color] Rec[color=Magenta]([/color]j[color=Magenta]).[/color]Pos[color=Magenta])[/color]
[color=Green]If[/color] CodeType [color=Magenta]=[/color] HTML [color=Green]Then[/color] tmpS [color=Magenta]=[/color] Replace[color=Magenta]([/color]Replace[color=Magenta]([/color]Replace[color=Magenta]([/color]tmpS[color=Magenta], [color=DarkOliveGreen]"<"[/color], [color=DarkOliveGreen]"<"[/color]),[/color] vbCrLf[color=Magenta], [color=DarkOliveGreen]"<br>"[/color] &[/color] vbCrLf[color=Magenta]), [color=DarkOliveGreen]" "[/color], [color=DarkOliveGreen]" "[/color])[/color]
s [color=Magenta]=[/color] s [color=Magenta]&[/color] tmpS
[color=Green]End If
Next
If[/color] Code[color=Magenta]([/color]CGLOBAL[color=Magenta]).[/color]Enable [color=Magenta]=[/color] [color=Green]True Then[/color]
Encode [color=Magenta]=[/color] Code[color=Magenta]([/color]CGLOBAL[color=Magenta]).[/color]Start [color=Magenta]&[/color] s [color=Magenta]&[/color] Code[color=Magenta]([/color]CGLOBAL[color=Magenta]).[/color][color=Green]End
Else[/color]
Encode [color=Magenta]=[/color] s
[color=Green]End If
End Function
Private Sub[/color] AddRecord[color=Magenta]([/color]Pos [color=Green]As Integer[/color][color=Magenta],[/color] iType [color=Green]As Integer[color=Magenta])[/color]
If[/color] RecCount [color=Magenta]=[/color] RecMax [color=Green]Then[/color]
RecMax [color=Magenta]=[/color] RecMax [color=Magenta]+[/color] [color=Blue]1000[/color]
[color=Green]ReDim Preserve[/color] Rec[color=Magenta]([/color]RecMax[color=Magenta])[/color]
[color=Green]End If[/color]
Rec[color=Magenta]([/color]RecCount[color=Magenta]).[/color]Pos [color=Magenta]=[/color] Pos
Rec[color=Magenta]([/color]RecCount[color=Magenta]).[/color]iType [color=Magenta]=[/color] iType
RecCount [color=Magenta]=[/color] RecCount [color=Magenta]+[/color] [color=Blue]1[/color]
[color=Green]End Sub
Private Sub[/color] ScanRecord[color=Magenta]()[/color]
[color=Green]Dim[/color] ColorStack[color=Magenta]%()[/color]
[color=Green]Dim[/color] i[color=Magenta]%,[/color] j[color=Magenta]%,[/color] LastPos[color=Magenta]%[/color]
[color=Green]ReDim[/color] ColorStack[color=Magenta]([/color]MAXCOLOR[color=Magenta])[/color]
[color=Green]For[/color] i [color=Magenta]=[/color] [color=Blue]0[/color] [color=Green]To[/color] MAXCOLOR [color=Magenta]-[/color] [color=Blue]1[/color]
ColorStack[color=Magenta]([/color]i[color=Magenta]) =[/color] [color=Blue]-1[/color]
[color=Green]Next
For[/color] i [color=Magenta]=[/color] [color=Blue]0[/color] [color=Green]To[/color] RecCount [color=Magenta]-[/color] [color=Blue]2[/color] Step [color=Blue]2[/color]
[color=Green]If[/color] Code[color=Magenta]([/color]Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType[color=Magenta]).[/color]Enable [color=Magenta]=[/color] [color=Green]False Then
For[/color] j [color=Magenta]=[/color] [color=Blue]0[/color] [color=Green]To[/color] MAXCOLOR [color=Magenta]-[/color] [color=Blue]1[/color]
ColorStack[color=Magenta]([/color]j[color=Magenta]) =[/color] [color=Blue]-1[/color]
[color=Green]Next
Else[/color]
LastPos [color=Magenta]=[/color] ColorStack[color=Magenta]([/color]Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType[color=Magenta])[/color]
[color=Green]If[/color] LastPos [color=Magenta]=[/color] [color=Blue]-1[/color] [color=Green]Then[/color]
ColorStack[color=Magenta]([/color]Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType[color=Magenta]) =[/color] i
[color=Green]Else
If[/color] Rec[color=Magenta]([/color]LastPos [color=Magenta]+ [color=Blue]1[/color]).[/color]iType [color=Magenta]=[/color] [color=Blue]-1[/color] [color=Green]Then[/color]
Rec[color=Magenta]([/color]Rec[color=Magenta]([/color]LastPos [color=Magenta]+ [color=Blue]1[/color]).[/color]Pos[color=Magenta]).[/color]iType [color=Magenta]=[/color] [color=Blue]-1[/color]
[color=Green]Else[/color]
Rec[color=Magenta]([/color]LastPos [color=Magenta]+ [color=Blue]1[/color]).[/color]iType [color=Magenta]=[/color] [color=Blue]-1[/color]
[color=Green]End If[/color]
Rec[color=Magenta]([/color]LastPos [color=Magenta]+ [color=Blue]1[/color]).[/color]Pos [color=Magenta]=[/color] i [color=Magenta]+[/color] [color=Blue]1[/color]
Rec[color=Magenta]([/color]i[color=Magenta]).[/color]iType [color=Magenta]=[/color] [color=Blue]-1[/color]
[color=Green]For[/color] j [color=Magenta]=[/color] [color=Blue]0[/color] [color=Green]To[/color] MAXCOLOR [color=Magenta]-[/color] [color=Blue]1[/color]
[color=Green]If[/color] ColorStack[color=Magenta]([/color]j[color=Magenta]) >[/color] LastPos [color=Green]Then[/color]
ColorStack[color=Magenta]([/color]j[color=Magenta]) =[/color] [color=Blue]-1[/color]
[color=Green]End If
Next
End If
End If
Next
End Sub
Private Sub[/color] ScanRTB[color=Magenta]([/color]str [color=Green]As String[color=Magenta])[/color]
Dim[/color] Pos[color=Magenta]%,[/color] i[color=Magenta]%[/color]
[color=Green]If[/color] str [color=Magenta]=[/color] [color=DarkOliveGreen]""[/color] [color=Green]Then Exit Sub[/color]
RecCount [color=Magenta]=[/color] [color=Blue]0[/color]
aLine [color=Magenta]= [color=MediumTurquoise]Split[/color]([/color]str[color=Magenta],[/color] vbCrLf[color=Magenta])[/color]
Pos [color=Magenta]=[/color] [color=Blue]0[/color]
ScanLine aLine[color=Magenta]([color=Blue]0[/color]),[/color] [color=Blue]0, 1[/color]
[color=Green]For[/color] i [color=Magenta]= [color=Blue]1[/color] [color=Green]To[/color] [color=MediumTurquoise]UBound[/color]([/color]aLine[color=Magenta])[/color]
Pos [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color]Pos [color=Magenta]+[/color] [color=Blue]1,[/color] str[color=Magenta],[/color] vbCrLf[color=Magenta])[/color]
ScanLine aLine[color=Magenta]([/color]i[color=Magenta]),[/color] Pos [color=Magenta]+[/color] [color=Blue]1, 1[/color]
[color=Green]Next
If[/color] CanNesting [color=Green]Then[/color] ScanRecord
Rec[color=Magenta]([/color]RecCount[color=Magenta]).[/color]Pos [color=Magenta]= [color=MediumTurquoise]Len[/color]([/color]str[color=Magenta]) +[/color] [color=Blue]1[/color]
Rec[color=Magenta]([/color]RecCount[color=Magenta]).[/color]iType [color=Magenta]=[/color] [color=Blue]0[/color]
[color=Green]End Sub
Private Sub[/color] ScanLine[color=Magenta]([/color]str [color=Green]As String[/color][color=Magenta],[/color] Offset [color=Green]As Long[/color][color=Magenta],[/color] iStep [color=Green]As Integer[color=Magenta])[/color]
Dim[/color] Pos1[color=Magenta]%,[/color] Pos2[color=Magenta]%,[/color] i[color=Magenta]%[/color]
[color=Green]Select Case[/color] iStep
[color=Green]Case[/color] [color=Blue]1[/color][color=Magenta]:[/color]
Pos1 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color][color=Blue]1,[/color] str[color=Magenta], [color=DarkOliveGreen]"'"[/color],[/color] vbTextCompare[color=Magenta])[/color]
[color=Green]If[/color] Pos1 [color=Magenta]<>[/color] [color=Blue]0[/color] [color=Green]Then
Dim[/color] c[color=Magenta]%[/color]
c [color=Magenta]=[/color] [color=Blue]0[/color]
Pos2 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([color=Blue]1,[/color] [color=MediumTurquoise]Left[/color]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]- [color=Blue]1[/color]), [color=DarkOliveGreen]""""[/color],[/color] vbTextCompare[color=Magenta])[/color]
[color=Green]While[/color] Pos2 [color=Magenta]<>[/color] [color=Blue]0[/color]
c [color=Magenta]=[/color] c [color=Magenta]+[/color] [color=Blue]1[/color]
Pos2 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color]Pos2 [color=Magenta]+ [color=Blue]1,[/color] [color=MediumTurquoise]Left[/color]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]- [color=Blue]1[/color]), [color=DarkOliveGreen]""""[/color],[/color] vbTextCompare[color=Magenta])[/color]
[color=Green]Wend
If[/color] c Mod [color=Blue]2 [color=Magenta]=[/color] 1[/color] [color=Green]Then[/color]
Pos1 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color]Pos1[color=Magenta],[/color] str[color=Magenta], [color=DarkOliveGreen]""""[/color],[/color] vbTextCompare[color=Magenta])[/color]
ScanLine [color=MediumTurquoise]Left[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1[color=Magenta]),[/color] Offset[color=Magenta],[/color] [color=Blue]2[/color]
ScanLine [color=MediumTurquoise]Mid[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]+ [color=Blue]1[/color]),[/color] Offset [color=Magenta]+[/color] Pos1[color=Magenta],[/color] [color=Blue]1[/color]
[color=Green]Else[/color]
ScanLine [color=MediumTurquoise]Left[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]- [color=Blue]1[/color]),[/color] Offset[color=Magenta],[/color] [color=Blue]2[/color] [color=Gray]'[/color]
AddRecord Offset [color=Magenta]+[/color] Pos1[color=Magenta],[/color] CCOMMENT
AddRecord Offset [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]str[color=Magenta]) +[/color] [color=Blue]1,[/color] CCOMMENT
[color=Green]End If
Else[/color]
ScanLine str[color=Magenta],[/color] Offset[color=Magenta], [color=Blue]2
[color=Green]End If
Case[/color] 2[/color]:[/color]
[color=Green]If[/color] str [color=Magenta]=[/color] [color=DarkOliveGreen]""[/color] [color=Green]Then
Exit Sub
End If[/color]
Pos1 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color][color=Blue]1,[/color] str[color=Magenta], [color=DarkOliveGreen]""""[/color],[/color] vbTextCompare[color=Magenta])[/color]
[color=Green]If[/color] Pos1 [color=Magenta]<>[/color] [color=Blue]0[/color] [color=Green]Then
If[/color] Pos1 [color=Magenta]<>[/color] [color=Blue]1[/color] [color=Green]Then[/color]
ScanLine [color=MediumTurquoise]Left[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]- [color=Blue]1[/color]),[/color] Offset[color=Magenta],[/color] [color=Blue]3[/color]
[color=Green]End If[/color]
Pos2 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color]Pos1 [color=Magenta]+[/color] [color=Blue]1,[/color] str[color=Magenta], [color=DarkOliveGreen]""""[/color],[/color] vbTextCompare[color=Magenta])[/color]
AddRecord Offset [color=Magenta]+[/color] Pos1[color=Magenta],[/color] CSTRING
AddRecord Offset [color=Magenta]+[/color] Pos2 [color=Magenta]+[/color] [color=Blue]1,[/color] CSTRING
ScanLine [color=MediumTurquoise]Mid[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos2 [color=Magenta]+ [color=Blue]1[/color]),[/color] Offset [color=Magenta]+[/color] Pos2[color=Magenta],[/color] [color=Blue]2[/color]
[color=Green]Else[/color]
ScanLine str[color=Magenta],[/color] Offset[color=Magenta], [color=Blue]3
[color=Green]End If
Case[/color] 3[/color]:[/color]
[color=Green]If[/color] str [color=Magenta]=[/color] [color=DarkOliveGreen]""[/color] [color=Green]Then
Exit Sub
End If[/color]
aWord [color=Magenta]= [color=MediumTurquoise]Split[/color]([/color]str[color=Magenta], [color=DarkOliveGreen]" "[/color])[/color]
Pos1 [color=Magenta]=[/color] [color=Blue]0[/color]
ScanLine aWord[color=Magenta]([color=Blue]0[/color]),[/color] Offset[color=Magenta],[/color] [color=Blue]4[/color]
[color=Green]For[/color] i [color=Magenta]= [color=Blue]1[/color] [color=Green]To[/color] [color=MediumTurquoise]UBound[/color]([/color]aWord[color=Magenta])[/color]
Pos1 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color]Pos1 [color=Magenta]+[/color] [color=Blue]1,[/color] str[color=Magenta], [color=DarkOliveGreen]" "[/color])[/color]
ScanLine aWord[color=Magenta]([/color]i[color=Magenta]),[/color] Offset [color=Magenta]+[/color] Pos1[color=Magenta], [color=Blue]4
[color=Green]Next
Case[/color] 4[/color]:[/color]
[color=Green]If[/color] str [color=Magenta]=[/color] [color=DarkOliveGreen]""[/color] [color=Green]Then
Exit Sub
End If[/color]
Pos1 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color][color=Blue]1,[/color] str[color=Magenta], [color=DarkOliveGreen]"."[/color])[/color]
[color=Green]If[/color] Pos1 [color=Magenta]>[/color] [color=Blue]1[/color] [color=Green]Then
If[/color] IsNumeric[color=Magenta]([color=MediumTurquoise]Mid[/color]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]- [color=Blue]1, 1[/color]))[/color] [color=Green]And[/color] IsNumeric[color=Magenta]([color=MediumTurquoise]Mid[/color]([/color]Pos1 [color=Magenta]+ [color=Blue]1, 1[/color]))[/color] [color=Green]Then[/color]
ScanLine str[color=Magenta],[/color] Offset[color=Magenta],[/color] [color=Blue]5[/color]
[color=Green]Else[/color]
ScanLine [color=MediumTurquoise]Left[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]- [color=Blue]1[/color]),[/color] Offset[color=Magenta],[/color] [color=Blue]5[/color]
AddRecord Offset [color=Magenta]+[/color] Pos1[color=Magenta],[/color] CSYMBOL
AddRecord Offset [color=Magenta]+[/color] Pos1 [color=Magenta]+[/color] [color=Blue]1,[/color] CSYMBOL
ScanLine [color=MediumTurquoise]Mid[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]+ [color=Blue]1[/color]),[/color] Offset [color=Magenta]+[/color] Pos1[color=Magenta],[/color] [color=Blue]4[/color]
[color=Green]End If
ElseIf[/color] Pos1 [color=Magenta]=[/color] [color=Blue]1[/color] [color=Green]Then[/color]
AddRecord Offset [color=Magenta]+[/color] Pos1[color=Magenta],[/color] CSYMBOL
AddRecord Offset [color=Magenta]+[/color] Pos1 [color=Magenta]+[/color] [color=Blue]1,[/color] CSYMBOL
ScanLine [color=MediumTurquoise]Mid[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]+ [color=Blue]1[/color]),[/color] Offset [color=Magenta]+[/color] Pos1[color=Magenta],[/color] [color=Blue]4[/color]
[color=Green]Else[/color]
ScanLine str[color=Magenta],[/color] Offset[color=Magenta], [color=Blue]5
[color=Green]End If
Case[/color] 5[/color]:[/color]
[color=Green]If[/color] str [color=Magenta]=[/color] [color=DarkOliveGreen]""[/color] [color=Green]Then
Exit Sub
End If
If[/color] IsNumeric[color=Magenta]([/color]str[color=Magenta])[/color] [color=Green]Then[/color]
AddRecord Offset [color=Magenta]+[/color] [color=Blue]1,[/color] CNUMBER
AddRecord Offset [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]str[color=Magenta]) +[/color] [color=Blue]1,[/color] CNUMBER
[color=Green]Exit Sub
End If
For[/color] i [color=Magenta]= [color=Blue]0[/color] [color=Green]To[/color] [color=MediumTurquoise]UBound[/color]([/color]aSymbol[color=Magenta])[/color]
Pos1 [color=Magenta]= [color=MediumTurquoise]InStr[/color]([/color][color=Blue]1,[/color] str[color=Magenta],[/color] aSymbol[color=Magenta]([/color]i[color=Magenta]))[/color]
[color=Green]If[/color] Pos1 [color=Magenta]<>[/color] [color=Blue]0[/color] [color=Green]Then[/color] [color=Gray]'如果包含[/color]
ScanLine [color=MediumTurquoise]Left[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]- [color=Blue]1[/color]),[/color] Offset[color=Magenta],[/color] [color=Blue]5[/color]
AddRecord Offset [color=Magenta]+[/color] Pos1[color=Magenta],[/color] CSYMBOL
AddRecord Offset [color=Magenta]+[/color] Pos1 [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]aSymbol[color=Magenta]([/color]i[color=Magenta])),[/color] CSYMBOL
ScanLine [color=MediumTurquoise]Mid[/color][color=Magenta]([/color]str[color=Magenta],[/color] Pos1 [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]aSymbol[color=Magenta]([/color]i[color=Magenta]))),[/color] Offset [color=Magenta]+[/color] Pos1 [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]aSymbol[color=Magenta]([/color]i[color=Magenta])) -[/color] [color=Blue]1, 5[/color]
[color=Green]Exit Sub
End If
Next[/color]
ScanLine str[color=Magenta],[/color] Offset[color=Magenta], [color=Blue]6
[color=Green]Case[/color] 6[/color]:[/color]
[color=Green]If[/color] str [color=Magenta]=[/color] [color=DarkOliveGreen]""[/color] [color=Green]Then
Exit Sub
End If
If[/color] str [color=Magenta]=[/color] [color=DarkOliveGreen]"_"[/color] [color=Green]Then[/color]
AddRecord Offset [color=Magenta]+[/color] [color=Blue]1,[/color] CSYMBOL
AddRecord Offset [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]str[color=Magenta]) +[/color] [color=Blue]1,[/color] CSYMBOL
[color=Green]ElseIf[/color] IsNumeric[color=Magenta]([/color]str[color=Magenta])[/color] [color=Green]Then[/color]
AddRecord Offset [color=Magenta]+[/color] [color=Blue]1,[/color] CNUMBER
AddRecord Offset [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]str[color=Magenta]) +[/color] [color=Blue]1,[/color] CNUMBER
[color=Green]ElseIf[/color] isFunction[color=Magenta]([/color]str[color=Magenta])[/color] [color=Green]Then[/color]
AddRecord Offset [color=Magenta]+[/color] [color=Blue]1,[/color] CFUNCTION
AddRecord Offset [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]str[color=Magenta]) +[/color] [color=Blue]1,[/color] CFUNCTION
[color=Green]ElseIf[/color] isKeyWord[color=Magenta]([/color]str[color=Magenta])[/color] [color=Green]Then[/color]
AddRecord Offset [color=Magenta]+[/color] [color=Blue]1,[/color] CKEYWORD
AddRecord Offset [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]str[color=Magenta]) +[/color] [color=Blue]1,[/color] CKEYWORD
[color=Green]Else[/color]
AddRecord Offset [color=Magenta]+[/color] [color=Blue]1,[/color] CNORMAL
AddRecord Offset [color=Magenta]+ [color=MediumTurquoise]Len[/color]([/color]str[color=Magenta]) +[/color] [color=Blue]1,[/color] CNORMAL
[color=Green]End If
Case Else[/color][color=Magenta]:[/color]
Debug[color=Magenta].[/color]Print [color=DarkOliveGreen]"Error Step"[/color]
[color=Green]End Select
End Sub[/color] 这几个函数就是语法分析的核心算法啦
Public Function Encode(str As String) As String
总的对外接口
Private Sub ScanRTB(str As String)
本来是没有监视剪贴板功能的,需要高亮的代码放在RichTextBox里面,所以就叫了这么个函数名字,后来把RichTextBox去掉了,这个函数名也不知道叫什么好,就没改了
Private Sub ScanLine(str As String, Offset As Long, iStep As Integer)
逐行分析,这个就是核心的核心啦。类似于二叉树的形式
Private Sub ScanRecord()
这个函数是为了合并一些可以合并的标签 顶!
以后发代码就不用自己写代码做高亮啦~! 三断笛看看有啥BUG没,估计还是有不少的 呵呵 你的代码我有时间可还得好好研究一下呢 比我写的规范多了 很多地方都值得学习 这样的好作品得顶起来呀!
BUG还没发现 没仔细去读代码 不过在运行这个程序的时候再打开VB,有时候会弹出作用于某某方法失败的提示
好帖,顶呀!!!!!!!!!! 樓主辛苦了 LZ我的是繁體系統可否給個繁體的,到我這邊是亂碼啊,謝了 繁体的怎么弄?我没做过繁体的,是不是把文字都换成繁体的就行呢? 好东西,谢谢楼主!!!收藏 不错不错 支持版主 不错,不错,我什么时候也能做出和楼主一样的好东西呀 颜色不好看呀 帅!!!!!!!!!!!!!! [quote][bo][un]冰镇柠檬汁儿[/un] 在 2008-6-26 14:07 的发言:[/bo]
颜色不好看呀 [/quote]
颜色可以自己改的,我没啥艺术天赋,所以随便弄个颜色就算了 不能运行呀[tk01] 不可能吧?提示什么错误? 什么ocx什么什么。。。。[tk01]
页:
[1]
2
