Imports EnvDTE
Imports System.Diagnostics

Public Module InvertLine

    
    ' Te makra demonstrują różne sposoby zamiany miejscami lewej i prawej strony równania
    ' tj. tego, co znajduje się w wierszu po dwóch stronach znaku = . Jesli wiersz nie zawiera
    ' znaku = , to makra te nie robią nic.
    Public Sub InvertAssignmentLine()

        ' Pobierz tekst.
        Dim str As String
        Dim i As Integer
        DTE.ActiveDocument.Selection.SelectLine()
        str = DTE.ActiveDocument.Selection.Text

        ' Usuń CRLF z końca wirsza.
        str = Left(str, Len(str) - 2)

        ' Znajdż znak = .
        i = InStr(str, "=")

        ' Odwróć tekst, jeśli zawierał znak = .
        If i > 0 Then
            str = Mid(str, i + 1) & "=" & Left(str, i - 1)
            DTE.ActiveDocument.Selection.Text = str & vbNewLine
        End If

        ' "De-select" - zdezaktywizuj bieżacy wiersz.
        DTE.ActiveDocument.Selection.Collapse()

    End Sub

    Public Sub InvertAssignmentLine_TheDOTNETWay()

        ' Pobierz tekst.
        Dim str As String
        Dim i As Integer
        DTE.ActiveDocument.Selection.SelectLine()
        str = DTE.ActiveDocument.Selection.Text

        ' Usuń CRLF.
        str = str.Substring(0, str.Length - 2)

        i = str.IndexOf("=")

        ' Odwróć tekst.
        If i > 0 Then
            str = str.Substring(i + 1) & "=" & str.Substring(1, i - 1)
            DTE.ActiveDocument.Selection.Text = str & vbNewLine
        End If

        ' "De-select" - zdezaktywizuj bieżacy wiersz.
        DTE.ActiveDocument.Selection.Collapse()

    End Sub

    Public Sub InvertAssignmentLine_AnotherApproach()

        With DTE.ActiveDocument.Selection

            ' Pobierz tekst.
            Dim str As String
            .SelectLine()
            str = .Text

            ' Wyszukaj znak = .
            Dim i As Integer
            For i = 1 To str.Length
                If str.Chars(i - 1) = "=" Then
                    Exit For
                End If
            Next

            ' Odwróć, jeśli zawierał znak = .
            If i < str.Length Then
                str = str.Substring(i, str.Length - i - 1).Trim & "=" & str.Substring(1, i - 2).Trim
                .Text = str & System.Environment.NewLine
            End If

            ' "De-select" - zwolnij wiersz.
            .Collapse()

        End With
    End Sub

End Module
