One of the very boring things when hacking a little function directly into
the Sourcefile is to copy its definition to the Headerfile.
Here is a quick Solution:
Put the Cursor in the Line where the Function starts (for Example : void
foo( int x) ). Call the Makro ‘DefineMethod’. It searches for the header file,
and then for the beginnig of the public, protected and private blocks. After that
it ask you in which block your function is defined. If there is no block the macro
creates one.
It uses the ‘ToggleHandCPP’ macro from Ian Southwell
(link here) !
‘
‘MTMacro.dsm – Written by M.Taupitz
‘
‘——————————————————————————
‘FILE DESCRIPTION: copys the definition from the CPP to the header.
‘——————————————————————————Sub DefineMethod()
‘DESCRIPTION: Copy the Definition into the Header-File
strHpt = ActiveDocument.FullName
if right(strHpt,3) = "CPP" Or right (strHpt,3) = "cpp" Then
ActiveDocument.Selection.SelectLine
strText = ActiveDocument.Selection.Text
if (Instr(strText, "::" ) = 0) Then
MsgBox("Line not valid !!")
Exit Sub
End Ifpos = Instr(strText, "::")
strName = Right(strText, (Len(strText) – (pos+1)))strClass = Left(strText,pos – 1)
while (instr(strClass, " ") > 0)
pos = instr(strClass, " ")
strTyp = strTyp & Left(strClass, pos)
strClass = Right(strClass, Len(strClass) – (pos) )
wendstrName = strTyp & " " & Left(strName,Len(strName)-2 ) ‘(without CRLF also -2)
iCou = InStr(ActiveDocument.Selection.Text,"//")
if (iCou > 0) Then
strName = strName & Trim( Left(strName, iCou – 1))
End If
while (instr(strName, ")" ) = 0 )
ActiveDocument.Selection.StartOfLine
ActiveDocument.Selection.LineDown dsMove
ActiveDocument.Selection.StartOfLine dsExtend
ActiveDocument.Selection.EndOfLine dsExtend
while Left(strName,1) = " " Or Left(strName,1) = " "
strName = Right(strName, Len(strName) -1)
Wend
iCou = InStr(ActiveDocument.Selection.Text,"//")
if (iCou = 0)Then
strName = strName & Trim(ActiveDocument.Selection.Text)
Else
strName = strName & Trim( Left(ActiveDocument.Selection.Text, iCou – 1))
End If‘ kill the Tabs
tabCou = InStr(strName, vbTab)
while tabCou > 0
strName = (Left(strName, tabCou-1)) & (Right(strName, Len(strName)-tabCou ) )
tabCou = InStr(strName, vbTab)
Wend ‘tabCou
WendstrName = strName & ";" & vbCrLf
ToggleHandCPP
ActiveDocument.Selection.SelectAll
strHead = ActiveDocument.Selection.Textif (instr(strHead,strClass) = 0) Then
MsgBox(" Can’t find class " & strClass & " !!")
ToggleHandCPP
Exit Sub
End Ifpos = instr(strHead,strClass)
linePublic = 0
linePrivate = 0
lineProtected = 0
ActiveDocument.Selection.EndOfDocument
lineBottom = ActiveDocument.Selection.CurrentLineActiveDocument.Selection.StartOfDocument
ActiveDocument.Selection.StartOfLine
ActiveDocument.Selection.SelectLine
strLine = ActiveDocument.Selection.Text
while (instr(strLine, "private:" ) = 0 And ActiveDocument.Selection.CurrentLine <> lineBottom)
ActiveDocument.Selection.StartOfLine
ActiveDocument.Selection.LineDown dsMove
ActiveDocument.Selection.SelectLine
strLine = ActiveDocument.Selection.Text
Wend
if (ActiveDocument.Selection.CurrentLine < lineBottom) Then
linePrivate = ActiveDocument.Selection.CurrentLine
else
linePrivate = 0
end ifActiveDocument.Selection.StartOfDocument
ActiveDocument.Selection.SelectLine
strLine = ActiveDocument.Selection.Text
while (instr(strLine, "protected:" ) = 0 And ActiveDocument.Selection.CurrentLine <> lineBottom)
ActiveDocument.Selection.StartOfLine
ActiveDocument.Selection.LineDown dsMove
ActiveDocument.Selection.SelectLine
strLine = ActiveDocument.Selection.Text
Wend
if (ActiveDocument.Selection.CurrentLine < lineBottom) Then
lineProtected = ActiveDocument.Selection.CurrentLine
else
lineProtected = 0
end ifActiveDocument.Selection.StartOfDocument
ActiveDocument.Selection.SelectLine
strLine = ActiveDocument.Selection.Text
while (instr(strLine, "public:" ) = 0 And ActiveDocument.Selection.CurrentLine <> lineBottom)
ActiveDocument.Selection.StartOfLine
ActiveDocument.Selection.LineDown dsMove
ActiveDocument.Selection.SelectLine
strLine = ActiveDocument.Selection.Text
Wend
if (ActiveDocument.Selection.CurrentLine < lineBottom) Then
linePublic = ActiveDocument.Selection.CurrentLine
else
linePublic = 0
end ifActiveDocument.Selection.StartOfDocument
ActiveDocument.Selection.SelectLine
strLine = ActiveDocument.Selection.Text
while (instr(strLine, "{" ) = 0 And ActiveDocument.Selection.CurrentLine <> lineBottom)
ActiveDocument.Selection.StartOfLine
ActiveDocument.Selection.LineDown dsMove
ActiveDocument.Selection.SelectLine
strLine = ActiveDocument.Selection.Text
Wend
if (ActiveDocument.Selection.CurrentLine < lineBottom) Then
lineStart = ActiveDocument.Selection.CurrentLine
else
lineStart = 0
end ifbAnswer = MsgBox("Copy the definition as –public-(YES), –protected-(NO) or –private-(CANCEL) ?", vbYesNoCancel)
Replace strName, vbCrLf, " "
Replace strName, vbCr, " "
Replace strName, vbLf, " "If bAnswer = vbYes Then
if linePublic = 0 Then
ActiveDocument.Selection.GoToLine lineStart+1, dsSelect
ActiveDocument.Selection = ActiveDocument.Selection & "public:" & vbCrLf & vbTab & strName
Else
ActiveDocument.Selection.GoToLine linePublic+1, dsSelect
ActiveDocument.Selection = ActiveDocument.Selection & vbTab & strName
End If
End IfIf bAnswer = vbNo Then
if lineProtected = 0 Then
ActiveDocument.Selection.GoToLine lineStart+1, dsSelect
ActiveDocument.Selection = ActiveDocument.Selection & "protected:" & vbCrLf & vbTab & strName
Else
ActiveDocument.Selection.GoToLine lineProtected+1, dsSelect
ActiveDocument.Selection = ActiveDocument.Selection & vbTab & strName
End If
End IfIf bAnswer = vbCancel Then
if linePrivate = 0 Then
ActiveDocument.Selection.GoToLine lineStart+1, dsSelect
ActiveDocument.Selection = ActiveDocument.Selection & "private:" & vbCrLf & vbTab & strName
Else
ActiveDocument.Selection.GoToLine linePrivate+1, dsSelect
ActiveDocument.Selection = ActiveDocument.Selection & vbTab & strName
End If
End IfToggleHandCPP
End If ‘right = "CPP"End Sub