' /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
Macros Use In VS 2008
最新推荐文章于 2023-02-10 23:16:51 发布