永夜的极光 发表于 2008-6-11 19:39

VB语法着色器

历经N天完成的作品,和大家分享一下.

本作品主使用了以下技术:
1.VB语法着色(核心功能,绝对原创)
2.监视剪贴板并自动替换(部分参考网络文章)
3.智能分析是否VB代码(原创,不过这个功能写的比较简单,所以智能程度不够,只是意思意思而已)
4.全局热键(部分参考网络文章)
5.托盘图标及Explorer崩溃后重建任务栏图标(部分参考网络文章)
6.一个封装了INI文件读写的类(原创)
7.自定义着色方案,支持着色方案导入导出(也算原创吧,不过这个没啥技术含量)

先来张图
[attach]35403[/attach]

下边是源码
[attach]35404[/attach]
压缩包内的CodeStyle文件夹内已经放了一个UBB的着色方案

希望大家提点意见

等静哥审核通过后再来几段效果代码

三断笛 发表于 2008-6-22 16:52

不错不错  支持版主!


太谦虚啦!

klj123 发表于 2008-6-22 18:48

不错不错  支持版主!

永夜的极光 发表于 2008-6-22 21:25

看看效果
[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]"&lt"[/color]),[/color] vbCrLf[color=Magenta], [color=DarkOliveGreen]"<br>"[/color] &[/color] vbCrLf[color=Magenta]), [color=DarkOliveGreen]" "[/color], [color=DarkOliveGreen]"&nbsp;"[/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]"&lt"[/color]),[/color] vbCrLf[color=Magenta], [color=DarkOliveGreen]"<br>"[/color] &[/color] vbCrLf[color=Magenta]), [color=DarkOliveGreen]" "[/color], [color=DarkOliveGreen]"&nbsp;"[/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]

永夜的极光 发表于 2008-6-22 21:33

这几个函数就是语法分析的核心算法啦

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()
这个函数是为了合并一些可以合并的标签

三断笛 发表于 2008-6-22 21:49

顶!
以后发代码就不用自己写代码做高亮啦~!

永夜的极光 发表于 2008-6-22 21:55

三断笛看看有啥BUG没,估计还是有不少的

三断笛 发表于 2008-6-23 23:21

呵呵 你的代码我有时间可还得好好研究一下呢  比我写的规范多了  很多地方都值得学习      这样的好作品得顶起来呀!

BUG还没发现  没仔细去读代码  不过在运行这个程序的时候再打开VB,有时候会弹出作用于某某方法失败的提示     



好帖,顶呀!!!!!!!!!!

jxyga111 发表于 2008-6-24 08:13

樓主辛苦了

jxyga111 发表于 2008-6-24 08:20

LZ我的是繁體系統可否給個繁體的,到我這邊是亂碼啊,謝了

永夜的极光 发表于 2008-6-24 09:25

繁体的怎么弄?我没做过繁体的,是不是把文字都换成繁体的就行呢?

canren 发表于 2008-6-25 09:51

好东西,谢谢楼主!!!收藏

qwer987 发表于 2008-6-25 16:09

不错不错  支持版主

飞翔鸟me 发表于 2008-6-25 20:36

不错,不错,我什么时候也能做出和楼主一样的好东西呀

冰镇柠檬汁儿 发表于 2008-6-26 14:07

颜色不好看呀

SkyGull 发表于 2008-6-26 14:45

帅!!!!!!!!!!!!!!

永夜的极光 发表于 2008-6-26 15:53

[quote][bo][un]冰镇柠檬汁儿[/un] 在 2008-6-26 14:07 的发言:[/bo]

颜色不好看呀 [/quote]
颜色可以自己改的,我没啥艺术天赋,所以随便弄个颜色就算了

冰镇柠檬汁儿 发表于 2008-6-26 16:25

不能运行呀[tk01]

永夜的极光 发表于 2008-6-26 16:30

不可能吧?提示什么错误?

冰镇柠檬汁儿 发表于 2008-6-26 17:27

什么ocx什么什么。。。。[tk01]

页: [1] 2

编程论坛