Define method
Posted
by Michael Taupitz
on August 1st, 1998
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 If
pos = 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) )
wend
strName = 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
Wend
strName = strName & ";" & vbCrLf
ToggleHandCPP
ActiveDocument.Selection.SelectAll
strHead = ActiveDocument.Selection.Text
if (instr(strHead,strClass) = 0) Then
MsgBox(" Can't find class " & strClass & " !!")
ToggleHandCPP
Exit Sub
End If
pos = instr(strHead,strClass)
linePublic = 0
linePrivate = 0
lineProtected = 0
ActiveDocument.Selection.EndOfDocument
lineBottom = ActiveDocument.Selection.CurrentLine
ActiveDocument.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 if
ActiveDocument.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 if
ActiveDocument.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 if
ActiveDocument.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 if
bAnswer = 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 If
If 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 If
If 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 If
ToggleHandCPP
End If 'right = "CPP"
End Sub

Comments
There are no comments yet. Be the first to comment!