Macros Use In VS 2008

' /file MyMacros

' /brief  Macros Use In VS 2008

'  Copyright (c) 2008-2017

'  If this code works, it was written by abenking.

'  If not, I don't know who wrote it.^_^

'  

' /history

'    1: 2008-06-13 create by abenking

'       -- AddFileDescription  

'          Creates a comment block for the currently selected file.

'       -- AddFunctionDescripton  

'          Creates a comment block for the currently selected C/C++ function prototype.

'

'/



Option Strict Off

Option Explicit Off



Imports EnvDTE

Imports EnvDTE80

Imports System.Diagnostics

Imports Microsoft.VisualBasic

Imports Microsoft.VisualBasic.ControlChars



Public Module MyMacros

    Function StripTabs(ByVal MyStr As String)

        ' Strips the leading tab spaces.

        While InStr(MyStr, Microsoft.VisualBasic.ControlChars.Tab) > 1

            MyStr = Right(MyStr, Len(MyStr) - InStr(MyStr, CStr(Microsoft.VisualBasic.ControlChars.Tab)))

        End While

        StripTabs = Trim(MyStr)

    End Function





    Sub AddFunctionDescription()

        ' Description: Creates a comment block for the currently selected C/C++ function prototype.

        Dim Header, prms As String

        Dim fcName, Descr As String

        Dim iPrm, iPrmA As Integer

        Dim selection As EnvDTE.TextSelection

        Dim RetTp As String



        ' Throughout this file, DTE.ActiveDocument.Selection is used in place

        ' of DTE.ActiveDocument.Selection.Text. The two are equivalent, and can

        ' be used interchangeably. The reason for the equivalence is that

        ' Text is regarded as the default property to use. All uses of

        ' ActiveDocument.Selection without any other property default to the Text

        ' property.

        If (DTE.ActiveDocument Is Nothing) Then

            Exit Sub

        End If

        If DTE.ActiveDocument.Language = EnvDTE.Constants.dsCPP Or DTE.ActiveDocument.Language = "CSharp" Then



            selection = DTE.ActiveDocument.Selection()

            Trim(selection.Text)

            Header = ""



            If selection.Text <> "" Then

                Header = StripTabs(Trim(selection.Text))

            End If



            ' Get the function return type.

            If Header <> "" Then

                If DTE.ActiveDocument.Language = "CSharp" Then

                    ' Skip the protection info (public/private ...).

                    Header = Right(Header, Len(Header) - InStr(Header, " "))

                End If

                Reti = InStr(Header, " ")

                Loc1 = InStr(Header, "(")

                If Reti < Loc1 Then

                    RetTp = Left(Header, Loc1 - 1)

                    Header = Right(Header, Len(Header) - Reti)

                End If

                RetTp = Left(RetTp, InStr(RetTp, " "))



                ' Get the function name.

                Loc1 = InStr(Header, "(") - 1

                Loc2 = InStr(Header, ")")



                If Loc1 > 0 And Loc2 > 0 Then ' Make sure there is a '(' and a ')'.

                    fcName = Left(Header, Loc1)

                    Header = Right(Header, Len(Header) - Len(fcName))



                    ' Do we have storage type on the return type?

                    Trim(fcName)

                    If InStr(fcName, " ") <> 0 Then

                        RetTp = RetTp + Left(fcName, InStr(fcName, " "))

                        fcName = Right(fcName, Len(fcName) - InStr(fcName, " "))

                    End If



                    ' Get the function parameters.

                    iPrm = 0

                    iPrmA = 0

                    prms = Header



                    ' Count the number of parameters.

                    Do While InStr(prms, ",") <> 0

                        iPrm = iPrm + 1

                        prms = Right(prms, Len(prms) - InStr(prms, ","))

                    Loop



                    ' Store the parameter list in the array.

                    If iPrm > 0 Then ' If multiple params.

                        iPrm = iPrm + 1

                        iPrmA = iPrm

                        ReDim ParamArr(iPrm)

                        Do While InStr(Header, ",") <> 0

                            ParamArr(iPrm - 1) = Left(Header, InStr(Header, ",") - 1)

                            ' Remove brace from first parameter.

                            If InStr(ParamArr(iPrm - 1), " (") <> 0 Then

                                ParamArr(iPrm - 1) = Right(ParamArr(iPrm - 1), (Len(ParamArr(iPrm - 1)) - (Len(ParamArr(iPrm - 1)) - (Len(ParamArr(iPrm - 1)) - InStr(ParamArr(iPrm - 1), " (")))))

                                Trim(ParamArr(iPrm))

                            End If

                            Header = Right(Header, Len(Header) - InStr(Header, ","))

                            iPrm = iPrm - 1

                        Loop

                        ParamArr(iPrm - 1) = Header



                        ' Remove trailing brace from last parameter.

                        If InStr(ParamArr(iPrm - 1), ")") <> 0 Then

                            ParamArr(iPrm - 1) = Left(ParamArr(iPrm - 1), InStr(ParamArr(iPrm - 1), ")") - 1)

                            Trim(ParamArr(iPrm - 1))

                        End If

                    Else ' Possibly one param.



                        ReDim ParamArr(1)

                        Header = Right(Header, Len(Header) - 1) ' Strip the first brace.

                        Trim(Header)

                        ParamArr(0) = StripTabs(Header)

                        If InStr(ParamArr(0), ")") <> 1 Then

                            ParamArr(0) = Left(ParamArr(0), InStr(ParamArr(0), ")") - 1)

                            Trim(ParamArr(0))

                            iPrmA = 1

                        End If

                    End If



                    ' Position the cursor one line above the selected text.

                    DTE.ActiveDocument.Selection.LineUp()

                    DTE.ActiveDocument.Selection.LineDown()

                    DTE.ActiveDocument.Selection.StartOfLine()

                    selection = DTE.ActiveDocument.Selection()

                    Dim BeginRaw As Integer

                    Dim EndRaw As Integer

                    Dim Col As Integer

                    BeginRaw = DTE.ActiveDocument.Selection.CurrentLine



                    Descr = Descr + "/*! /brief " + fcName + CStr(Lf)

                    Descr = Descr + " *     " + CStr(Lf)



                    ' Print the parameter list.

                    Last = iPrmA

                    Do While iPrmA <> 0

                        ' Remove a line feed from any of the argumentextSelection.

                        If InStr(ParamArr(iPrmA - 1), CStr(Lf)) <> 0 Then

                            ParamArr(iPrmA - 1) = Right(ParamArr(iPrmA - 1), (Len(ParamArr(iPrmA - 1)) - (Len(ParamArr(iPrmA - 1)) - (Len(ParamArr(iPrmA - 1)) - InStr(ParamArr(iPrmA - 1), CStr(Lf))))))

                            Trim(ParamArr(iPrmA - 1))

                        End If

                        ParamArr(iPrmA - 1) = StripTabs(ParamArr(iPrmA - 1))

                        ' If there are 2+ parameters, the first parameter will

                        ' have a '(' prepended to it. Remove it here:

                        If iPrmA = Last And Last <> 1 Then

                            ParamArr(iPrmA - 1) = Right(ParamArr(iPrmA - 1), Len(ParamArr(iPrmA - 1)) - 1)

                        End If

                        Descr = Descr + "* /param " + ParamArr(iPrmA - 1) + CStr(Lf)

                        iPrmA = iPrmA - 1

                    Loop

                    If RetTp <> "" Then

                        Descr = Descr + "* /return " + RetTp + CStr(Lf)

                    End If



                    selection = DTE.ActiveDocument.Selection()

                    selection.Text = Descr

                    DTE.ActiveDocument.Selection.StartOfLine()

                    PutOutTheStringInStart(" */")

                    EndRaw = DTE.ActiveDocument.Selection.CurrentLine

                    BeginRaw = EndRaw - BeginRaw + 1

                    Col = Len(" *    ")

                    ActiveDocument.Selection.MoveTo(EndRaw - BeginRaw + 2, Col + 2)



                Else

                    MsgBox("It is possible that the function you are trying to work with has a syntax error.")

                End If

            End If



        Else



            MsgBox("You need to have an active C/C++ document open" + CStr(Lf) + "with the function prototype selected.")

        End If

    End Sub



    Sub AddFileDescription()

        ' Creates a comment block for the currently selected file.

        Dim selection As EnvDTE.TextSelection

        Dim FileName As String

        Dim BeginYear As String

        Dim EndYear As String

        Dim BeginRaw As Integer

        Dim EndRaw As Integer

        Dim Col As Integer



        BeginYear = Year(Now())

        EndYear = Year(Now()) + 9

        FileName = DTE.ActiveDocument.Name

        DTE.ActiveDocument.Selection.StartOfDocument()

        DTE.ActiveDocument.Selection.StartOfLine()

        'BeginRaw = DTE.ActiveDocument.Selection.CurrentLine

        ' This is added with one assignment statement, which enables the user

        '  to press undo once and remove the entire change.

        'selection = DTE.ActiveDocument.Selection

        PutOutTheStringInStart("/*! /file " + FileName)

        PutOutTheStringInStart(" * /brief  ")

        PutOutTheStringInStart(" *  Copyright (c) " + BeginYear + "-" + EndYear)

        PutOutTheStringInStart(" *  If this code works, it was written by abenking.")

        PutOutTheStringInStart(" *  If not, I don't know who wrote it.^_^")

        PutOutTheStringInStart(" *")

        PutOutTheStringInStart(" * /history")

        PutOutTheStringInStart(" *    1: " + DateString() + " create by abenking")

        PutOutTheStringInStart(" *")

        PutOutTheStringInStart(" */")

        Col = Len(" * /brief  ")

        DTE.ActiveDocument.Selection.MoveTo(2, Col + 1)

    End Sub

    Sub PutOutTheStringInStart(ByVal Text As String)

        selection = DTE.ActiveDocument.Selection

        selection.Text = Text + CStr(Lf)

        DTE.ActiveDocument.Selection.StartOfLine()

    End Sub

End Module
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值