HTML-Nachrichten nach Text konvertieren

In Newsgruppen ist es nach wie vor üblich und auch erwünscht, dass Beiträge nur in reinem Text gehalten werden. Dennoch passiert es hin und wieder, dass HTML gepostet wird. Oder man bekommt eine eMail in HTML. Diese lassen sich nur schlecht in reiner Textform weiterbearbeiten, da die Zeilen nicht umgebrochen werden etc. Das folgende Makro erledigt dies gegebenenfalls auf Knopfdruck: es entfernt alle im Dokument enthaltenen Abbildungen, versieht den Text mit der Standard-Vorlage und bricht die Zeilen auf ca. 70 Zeichen um.

Das Makro arbeitet leider nicht sehr schnell... Längere Dokumente unterwirft man ihm besser nicht, für kurze Nachrichten mit ein paar Zeilen taugt es allemal!

' Maximale Zeilenlänge: kann angepasst werden
Const MaxChars% = 70

Sub HTMLMailToText
   ' nur in StarWriter zulassen
   If ActiveModule.Name = "StarWriter" then
      ' Sichtbare Formatierung des Dokumentes ausschalten
      Selection.ActionStart()

      ' Cursor-Position merken
      Selection.InsertBookmark("_mhtmp_")

      ' Weiche Zeilenschaltungen ersetzen
      ActiveWindow.SearchSettings.RegExp = True
      ActiveWindow.ReplaceAll("\n", " ")
      ActiveWindow.SearchSettings.RegExp = False

      ' Allenfalls eingefügte Graphiken entfernen
      For i% = ActiveWindow.Graphics.Count To 1 Step -1
         ActiveWindow.Graphics(i%).Delete()
      Next

      ' Gesamten Text mit Standard-Vorlage für Mail versehen
      Selection.SelectAll()
      Selection.StyleApply("Vorformatierter Text", 2)
      Selection.ResetAttributes()

      ' Erste Zeile 
      Selection.Escape()
      Selection.JumpToStartOfDoc()
      Selection.Insert("> ")
      Selection.GoToStartOfLine()
      Selection.GoToEndOfLine(True)

      ' Für alle übrigen Zeilen des Dokuments durchführen:
      Do
         ' Ist maximale Zeilenlänge überschritten?
         If Len(Selection.Value) > MaxChars% Then
            ' Allenfalls kürzen
            Do
               Selection.GoToPrevWord(True)
            Loop Until Len(Selection.Value) < MaxChars%
            Selection.Escape()

            ' Umbruch einfügen
            Selection.InsertPara()
            Selection.Insert("> ")
            Selection.GoToStartOfLine()
            Selection.GoToEndOfLine(True)

         ' Ist Absatzende erreicht?
         ElseIf Selection.IsEndOfPara Then
            Selection.Escape()

            ' Zu nächstem Absatz wechseln
            Selection.GoToNextWord(False)
            Selection.Insert("> ")
            Selection.GoToStartOfLine()
            Selection.GoToEndOfLine(True)

         ' Weder Zeilenlänge noch Absatzende erreicht
         Else
            ' Markierung erweitern bis zum nächsten Wort
            Selection.GoToNextWord(True)
         EndIf      
      Loop Until Selection.IsEndOfDoc

      Selection.JumpToBookmark("_mhtmp_")
      Selection.DeleteBookmark("_mhtmp_")

      Selection.ActionEnd()
   Else
      MsgBox("Dieses Makro funktioniert nur in einem Textdokument!", _
             16, "Fehler")
   End If
End Sub



Letzte Änderung: 30.03.98
Copyright ©1998 by Michael Herger