source-engine/devtools/devstudio macros/comments.dsm
FluorescentCIAAfricanAmerican 3bf9df6b27 1
2020-04-22 12:56:21 -04:00

271 lines
7.9 KiB
Plaintext

'------------------------------------------------------------------------------
'FILE DESCRIPTION: Contains macros which make MSVC commenting more automated
'------------------------------------------------------------------------------
Sub ModuleHeader()
'DESCRIPTION: This macro adds the standard copyright information to the top of a module.
ActiveDocument.Selection.StartOfDocument
' Create the standard file prologue
Header = "//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======" + vbCrLf
Header = Header + "//" + vbCrLf
Header = Header + "// Purpose: " + vbCrLf
Header = Header + "//" + vbCrLf
Header = Header + "//=============================================================================" + vbCrLf + vbCrLf
' Add the single inclusion macros for header files
DotHPos = InStr(ActiveDocument.Name, ".h")
If DotHPos > 0 Then
InclusionKey = Left(ActiveDocument.Name, DotHPos - 1)
InclusionKey = UCase(InclusionKey) + "_H"
Header = Header + "#ifndef " + InclusionKey + vbCrLf
Header = Header + "#define " + InclusionKey + vbCrLf
Header = Header + "#ifdef _WIN32" + vbCrLf
Header = Header + "#pragma once" + vbCrLf
Header = Header + "#endif" + vbCrLf + vbCrLf
End If
ActiveDocument.Selection.Text = Header
' Add the "#endif" for header files
If DotHPos > 0 Then
ActiveDocument.Selection.EndOfDocument
Header = vbCrLf + "#endif // " + InclusionKey + vbCrLf
ActiveDocument.Selection.Text = Header
End If
ActiveDocument.Selection.StartOfDocument
End Sub
Sub TypeHeader()
'DESCRIPTION: This macro adds a description block above a type declaration
' Select the text on the current line and store it for parsing
ActiveDocument.Selection.SelectLine
TypeDec = ActiveDocument.Selection.Text
ActiveDocument.Selection.StartOfLine
' Check to make sure that this line is a type delcaration
If InStr(TypeDec, "class") = 0 And InStr(TypeDec, "struct") = 0 And InStr(TypeDec, "interface") = 0 And InStr(TypeDec, "enum") = 0 Then
MsgBox("This line does not contain a class, struct, interface, or enum declaration.")
Else
' Construct the type header
Header = "//-----------------------------------------------------------------------------" + vbCrLf
Header = Header + "// Purpose: " + vbCrLf
Header = Header + "//-----------------------------------------------------------------------------" + vbCrLf
' Write the header
ActiveDocument.Selection.Text = Header
End If
End Sub
Sub FunctionHeader()
'DESCRIPTION: This macro creates a function header for C functions or C++ member functions
' Select the text on the current line and store it for parsing
ActiveDocument.Selection.SelectLine
FunctionImp = ActiveDocument.Selection.Text
ActiveDocument.Selection.StartOfLine
LineNum = ActiveDocument.Selection.CurrentLine
FunctionName = Left(FunctionImp, InStr(FunctionImp, "("))
' Check to make sure that this line is a class delcaration
If len(FunctionName) = 0 Then
MsgBox("This line does not contain a function implementation.")
Else
FuncArray = Split(FunctionName)
ReturnType = ""
' Get the return type and function name
For Each Element In FuncArray
if InStr(Element, "(") = 0 Then
ReturnType = ReturnType + Element + " "
Else
FunctionName = Left(Element, len(Element) - 1)
End If
Next
ReturnType = Trim(ReturnType)
if ReturnType = "BOOL" Then
ReturnType = "Returns TRUE on success, FALSE on failure."
Elseif ReturnType = "bool" Then
ReturnType = "Returns true on success, false on failure."
End If
' Place the function parameters in its own string
Params = Right(FunctionImp, len(FunctionImp) - InStr(FunctionImp, "("))
Do While InStr(Params, ")") = 0
ActiveDocument.Selection.LineDown
ActiveDocument.Selection.SelectLine
Params = Left(Params, InStr(Params, vbCrLf) - 1)
Params = Params + Trim(ActiveDocument.Selection.Text)
Loop
ActiveDocument.Selection.GotoLine LineNum
Params = Left(Params, InStr(Params, ")") - 1)
Params = Trim(Params)
' Remove any /* */ comments from Params
Pos = InStr( Params, "/*" )
Do While Pos
EndComment = InStr( Params, "*/" )
If EndComment Then
StartString = Left( Params, InStr( Params, "/*" ) - 1)
Pos2 = len( Params ) - InStr( Params, "*/" ) + 3
EndString = Mid( Params, InStr( Params, "*/" ) + 2, Pos2 )
StartString = Trim( StartString )
EndString = Trim( EndString )
Params = StartString + EndString
Pos = InStr( Params, "/*" )
Else
Pos = 0
End If
Loop
' Create an array of individual parameters
ParamsArray = Split(Params, ",")
' Construct the parameters section
ParamSection = ""
AddNewLine = 0
For Each Element In ParamsArray
Element = Trim(Element)
Element = Right(Element, len(Element) - InstrRev(Element, " "))
if AddNewLine = 1 Then
ParamSection = ParamSection + vbCrLf + "// "
End If
ParamSection = ParamSection + Element + " - "
AddNewLine = 1
Next
' Construct the rest of the header
Header = "//-----------------------------------------------------------------------------" + vbCrLf
Header = Header + "// Purpose: " + vbCrLf
if ParamSection <> "void - " and ParamSection <> "" then
Header = Header + "// Input : " + ParamSection + vbCrLf
end if
if ReturnType <> "void" and ReturnType <> "" Then
Header = Header + "// Output : " + ReturnType + vbCrLf
end if
Header = Header + "//-----------------------------------------------------------------------------" + vbCrLf
' Write the header
ActiveDocument.Selection.Text = Header
End If
End Sub
'DESCRIPTION: Comments in or out a line of code, then moves to the next line.
Sub ToggleComment()
ActiveDocument.Selection.SelectLine
LineText = ActiveDocument.Selection.Text
ActiveDocument.Selection.StartOfLine
FirstTwoChars = Left(LineText, 2)
If len(FirstTwoChars) < 2 Then
ActiveDocument.Selection = ""
Elseif FirstTwoChars = "//" Then
ActiveDocument.Selection.CharRight dsExtend
ActiveDocument.Selection.CharRight dsExtend
ActiveDocument.Selection = ""
Else
ActiveDocument.Selection = "//"
End if
ActiveDocument.Selection.LineDown
End Sub
Sub ScheduleTemplate()
'DESCRIPTION: Adds a schedule template at the current cursor position
ActiveDocument.Selection = "//==================================================" + vbCrLf + "// SCHED_" + vbCrLf + "//==================================================" + vbCrLf + vbCrLf + "Schedule" + vbCrLf + vbTab + "SCHED_" + vbCrLf + "Tasks" + vbCrLf + vbCrLf + "Interrupts" + vbCrLf + vbCrLf + ActiveDocument.Selection
End Sub
Sub CommentTODO()
'DESCRIPTION: Adds "//TODO:" at the current cursor position
ActiveDocument.Selection = "//TODO: " + ActiveDocument.Selection
End Sub
Sub CommentFIXME()
'DESCRIPTION: Adds "//FIXME:" at the current cursor position
ActiveDocument.Selection = "//FIXME: " + ActiveDocument.Selection
End Sub
Sub CommentNOTENOTE()
'DESCRIPTION: Adds "//NOTENOTE:" at the current cursor position
ActiveDocument.Selection = "//NOTENOTE: " + ActiveDocument.Selection
End Sub
Sub JumpToHeader()
'////////////////////////////////////////////
'DESCRIPTION: Switch Between Header and cpp
'////////////////////////////////////////////
Dim myDocument
Dim a
Dim b
Dim c
Dim Flag
Dim Flag1
Flag1 = 0
Flag = 1
a = ActiveDocument.FullName
tmp = InStr(a, ".cpp")
If tmp Then
b = Left(a, Len(a) - 3) + "h"
c = Left(a, Len(a) - 3) + "h"
Flag1 = 1
Else
tmp = InStr(a, ".c")
If tmp Then
b = Left(a, Len(a) - 1) + "h"
c = Left(a, Len(a) - 1) + "h"
Flag1 = 1
Else
tmp = InStr(a, ".h")
If tmp Then
b = Left(a, Len(a) - 1) + "c"
c = Left(a, Len(a) - 1) + "cpp"
Flag1 = 1
End If
End If
End If
For Each myDocument In Application.Documents
If myDocument.FullName = b Then
myDocument.Active = True
Flag = 0
Exit For
End If
If myDocument.FullName = c Then
myDocument.Active = True
Flag = 0
b = c
Exit For
End If
Next
If Flag And Flag1 Then
Documents.Open b, "Text"
End If
End Sub