Нужны предложения по способу форматирования c комментария с помощью макроса нажатия клавиш - PullRequest
0 голосов
/ 18 июня 2011

для визуализации представьте, что '_' на самом деле пустое.

Рассмотрите следующее

/*!
____This_is_a_comment_about_a_function
____and_its_purpose
____and_arguments
____and_things_of_that_ilk
*/

Что я хотел бы сделать, это выбрать этот фрагмент текста, нажать кнопкуи блин!Он изменяется на эту форму.

/*!____________________________________
____This_is_a_comment_about_a_function_
____and_its_purpose____________________
____and_arguments______________________
____and_things_of_that_ilk_____________
_____________________________________*/

Зачем мне это нужно? Вторая форма облегчает мое зрение при просмотре кода.Для меня достаточно проблемы, что что-то должно быть сделано.

Что я пробовал до сих пор? В основном поиск в Google для примеров макросов.Ничего не появилось, что подсказывает направление, которое может быть продуктивным.Немного изо всех сил пытаюсь понять макро-иде.Некоторые ищут здесь на SO

Какой у меня вопрос?

Можете ли вы указать мне ссылки?Дай мне подсказку?Предположить?о том, что мне нужно изучить, чтобы понять, как это сделать.

Спасибо за внимание.

Зло.

Ответы [ 2 ]

1 голос
/ 18 июня 2011

Вы искали примеры макросов для получения и замены выделенного текста с помощью макроса, а также эквивалент макроса заполнение строк ?Я думаю, что эти три вещи могут быть объединены с циклом над каждой строкой, чтобы создать последнюю строку для замены исходного выделения.

Psuedocode:

selText = getSelectedText();
selTextSplit = selText.split("\n");
selTextPadded = "";
for (i = 0; i < selTextSplit.length; i++) {
    selTextPadded += selTextSplit[i].padRight(80, ' ') + "\n";
}
replaceSelectedText(selTextPadded);
0 голосов
/ 21 июня 2011

Это то, что я разработал. Спасибо Джареду за то, что он указал мне продуктивное направление.

Sub FormatEvil()

Try
    DTE.UndoContext.Open("Evil Style C Comment Padder")

    Dim txtSel As TextSelection = DTE.ActiveDocument.Selection

    Dim currText As String = txtSel.Text

    If currText.Trim.StartsWith("/*") AndAlso currText.Trim.EndsWith("*/") Then

        Dim splitText() As String = Split(currText, vbCrLf)

        ' Trim all of the lines down
        For z = 0 To UBound(splitText) - 1
            splitText(z) = Trim(splitText(z))
        Next

        ' How long should the block be?
        Dim longestLine As Integer = 0
        For z = 0 To UBound(splitText) - 1
            If splitText(z).Length > longestLine Then
                longestLine = splitText(z).Length
            End If
        Next

        longestLine += 4

        ' build the value to replace the selection with.
        Dim selTextPadded As String = "/*    "
        selTextPadded = selTextPadded.PadRight(longestLine + 2) + vbCrLf

        For z = 1 To UBound(splitText) - 2
            splitText(z) = splitText(z).PadRight(longestLine - 2)
            selTextPadded += "    " + splitText(z).ToString() + vbCrLf
        Next

        splitText(UBound(splitText) - 1) = splitText(UBound(splitText) - 1).PadRight(longestLine - 2)
        selTextPadded += "    " + splitText(UBound(splitText) - 1).ToString() + vbCrLf

        Dim tmp As String = "*/"
        selTextPadded += tmp.PadLeft(longestLine + 2) + vbCrLf

        txtSel.Delete() 'This is to help keep formatting correct when multiline
        txtSel.Insert(selTextPadded, vsInsertFlags.vsInsertFlagsContainNewText)
    Else
        ' This is not a c comment
    End If
Finally
    DTE.UndoContext.Close()
End Try
End Sub
...