Tipps für HTML-Editoren

    • VB.NET

      Tipps für HTML-Editoren

      Hey,
      Ich entwickle zwar keine HTML-Editoren, aber vielleicht hilft das dem ein oder anderen hier.
      Bis jetzt sind es nur zwei Tipps (habe aber vor, noch mehr zu veröffentlichen), der erste fügt nach einem '=' automatisch '"Wert"' ein, der andere fügt nach einem eingegebenen Starttag automatisch den zugehörigen Endtag ein.
      Außerdem ist eine Methode enthalten, mit der man aus z.B. <Tag ...> den Namen auslesen kann.
      Das ganze ist so geschrieben, dass man statt '<' bspw. auch '[' verwenden kann, usw.
      Also hier der Code:

      VB.NET-Quellcode

      1. ' Die Konstanten für die Tagerkennung
      2. Private Const TagStartString As String = "<"
      3. Private Const TagEndString As String = ">"
      4. ' Dieses Event wird ausgeführt, wenn der Text in der MainTextBox geändert wird.
      5. Private Sub MainTextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MainTextBox.TextChanged
      6. Dim p As Integer = MainTextBox.SelectionStart ' Den Start der Markierung bzw. die Position des Cursors in eine Variable speichern
      7. Dim sBef As String = MainTextBox.Text.Substring(0, p) ' Den Text vor der Cursorposition speichern
      8. Dim sAft As String = MainTextBox.Text.Substring(p, MainTextBox.Text.Length - p) ' Den Text nach der Cursorposition speichern
      9. If (sBef.EndsWith("=")) Then ' Wenn der Text vor der Cursorposition mit '=' beginnt, dann...
      10. MainTextBox.Text = sBef + """Wert""" + sAft ' ...füge zwischen dem Text vor und nach der Cursorposition '"Wert"' ein...
      11. MainTextBox.SelectionStart = p + 1 ' ...und setze die Markierung auf den eben eingefügten Text
      12. MainTextBox.SelectionLength = 4
      13. End If
      14. If (sBef.EndsWith(TagEndString) And sBef.Contains(TagStartString)) Then ' Wenn der Text vor der Cursorposition mit '>' endet und '<' enthält
      15. Dim s() As String = Split(sBef, TagStartString) ' Den Text vor der Cursorposition durch '<' teilen
      16. Dim tagStr = TagStartString + s(s.Length - 1) ' in tagStr wird gespeichert: '<' + den letzten Teil der obigen Zeile
      17. If (Not GetTagName(tagStr).StartsWith("/")) Then ' Nur, wenn der vermeintliche Tag kein Endtag ist
      18. If (GetTagName(tagStr).Length = 0) Then ' Wenn der Tagname aus null Zeichen besteht...
      19. Debug.WriteLine("Syntax Fehler: Position " + p.ToString()) ' ...schreibe einen Fehler in das Ausgabefenster...
      20. Exit Sub ' ...und brich das Event ab
      21. End If
      22. MainTextBox.Text = sBef + "Inhalt" + TagStartString + "/" + GetTagName(tagStr) + TagEndString + sAft ' Falls jedoch das eben eingegebene doch ein Starttag sein sollte, Endtag einfügen
      23. MainTextBox.SelectionStart = p ' Alte Position wiederherstellen
      24. MainTextBox.SelectionLength = 6 ' Markierung auf 'Inhalt' legen
      25. End If
      26. End If
      27. End Sub
      28. Public Function GetTagName(ByVal S As String) As String ' S muss beispielsweise so aufgebaut sein: '<Tagname ...>'
      29. Dim result As String = S
      30. If (S.StartsWith(TagStartString) And S.EndsWith(TagEndString)) Then ' Wenn S mit '<' anfängt und mit '>' aufhört, dann ist es ein Tag
      31. result = Split(result.Remove(0, 1).Remove(result.Length - 2, 1))(0) ' Tagname herausfiltern
      32. End If
      33. Return result ' Tagname zurückgeben
      34. End Function
      35. Public Sub TransFormTagString(ByVal NewTagStart As String, ByVal NewTagEnd As String) ' Neue Tagzeichen setzen
      36. MainTextBox.Text = MainTextBox.Text.Replace(TagStartString, NewTagStart).Replace(TagEndString, NewTagEnd) ' Die Tagzeichen durch neue ersetzen
      37. End Sub

      Benötigt wird eine TextBox mit dem Namen 'MainTextBox' oder man ändert ggf. den Namen ab.

      Ich hoffe, jemand kann den gebrauchen ^^