[VB.NET] HTML Tag Highlighting

Schwere Saga.

Unter was zählt das?

Bestimmte Wörter in der Richtextbox färben die erscheinen (Beispiel: "<a" bestimmt keywords die dazwischenliegen(href=) ">",</a>)

Die Klammern werden bei href= nicht gefärbt.

Unheimlich nett wenn Lösungsideen erscheinen.
 
C#:
        /// <summary>
        /// Regex: Tags bei dennen nur Beginntag und Endetag interresant sind
        /// </summary>
        internal static string ParseOnlyTag()
        {
            string comHtml = string.Empty;
            string relHtml = string.Empty;
            foreach (string tag in HTMLTags().Keys)
            {
                if (HTMLTags()[tag])
                    comHtml += tag + "|";
                else
                    relHtml += tag + "|";
            }
            comHtml = comHtml.Remove(comHtml.Length - 1);
            relHtml = relHtml.Remove(relHtml.Length - 1);

            return @"(?'htmlbegin'<[^\w<>]*?(?'htmltag'" + relHtml + @")[^\w<>]* *[^<>]*>)" +
                @"|(?'htmlbegin'< *?(?'htmltag'" + comHtml + @")[^\w<>]* *[^<>]*/ *>)";
        }

        /// <summary>
        /// erlaubte Tags
        /// </summary>
        internal static Dictionary<string, bool> HTMLTags()
        {
            if (htmlTags == null)
            {
                htmlTags = new Dictionary<string, bool>();
                htmlTags.Add("p", false);
                htmlTags.Add("span", false);
                htmlTags.Add("pre", false);
                htmlTags.Add("div", false);

                htmlTags.Add("center", false);
                htmlTags.Add("big", false);
                htmlTags.Add("small", false);
                htmlTags.Add("s", false);
                htmlTags.Add("u", false);
                htmlTags.Add("font", false);
                htmlTags.Add("b", false);
                htmlTags.Add("i", false);

                htmlTags.Add("br", false);
                htmlTags.Add("tt", false);
                htmlTags.Add("code", true);

                htmlTags.Add("sup", false);
                htmlTags.Add("sub", false);

                htmlTags.Add("hr", false);

                htmlTags.Add("h1", false);
                htmlTags.Add("h2", false);
                htmlTags.Add("h3", false);
                htmlTags.Add("h4", false);
                htmlTags.Add("h5", false);
                htmlTags.Add("h6", false);

                htmlTags.Add("ul", false);
                htmlTags.Add("ol", false);
                htmlTags.Add("li", false);

                htmlTags.Add("poem", true);
                htmlTags.Add("ref", true);
                htmlTags.Add("references", false);
                htmlTags.Add("nowiki", true);
                htmlTags.Add("source", true); //Quellcode anzeige (Syntaxhervorhebung)
                htmlTags.Add("hiero", true); //Hieroglyphen
                htmlTags.Add("math", true); //Math. Formeln
            }
            return htmlTags;
        }

Aus meinem WIkiParser, liefert dir mit ParseOnlyTag ein RegEx

Und dann mit:
C#:
MatchCollection mc = Regex.Matches(meinText, ParseOnlyTag(), RegexOptions.IgnoreCase);
foreach (Match m in mc)
{
    if (m.Groups["htmlbegin"].Success)
    {
             //Tag gefunden jetzt am besten mit IndexOf nochmal diesen String suchen und mit SelectionStart und SelectionLength (oder Select) markieren und Farbe setzen (SelectionColor)
    }
}
die Pattern durchlaufen lassen.

Ansonsten würde mich mal interessieren was du bisher hast.
BIsher kann ich deine Erfahrungen noch überhaupt nicht einschätzen.
 
Zuletzt bearbeitet von einem Moderator:
"e."

Gibts ne Möglichkeit es auch in VB zu machen ohne diesen Translator oder wie er auch heißt zu nehmen?

Jedenfalls erstmal Danke für den Code vielleicht übersetze ich ihn und dann mal kucken...

... Aber wäre es auch möglich, mit dieser folgenden Idee ranzugehen?

Wenn "<" Taste gedrückt wird und "Variable mit Keywords" erscheint, und ">" erscheint es zu highliten?

Ich habe mir schon ein opensource - VB Projekt "HTML Pad" gedownloadet und mal geklotzt.

Es ist dort zwar auch ein Highliting angegeben jedoch seh ich dort nicht durch...

Zu deinen Fragen möchte ich es nur so sagen:

ich kann zwar logisch in VB.NET denken jedoch fehlt mir die praktische Erfahrung also etwas zu machen was sehr langsrebig und kompliziert ist.

Danke + Gruß.
 
Zuletzt bearbeitet:
Hallo,

Ich hätte wenigstens noch eine Frage.

Ist es möglich mit VB08 also .NET einzelne Wörter zu färben?

Jedoch will ich nicht das hier: Richtextbox1.selectioncolor

Das hat mir schonmal jemand angedreht und das will ich nicht... könnte ich dies mit REG EX ermöglichen?

Und wenn wie

Bitte keine Links sondern Erklärungen....

Danke.
 
Hallo,

Heute bin ich mal etwas nett zu den Leuten

Bereits habe ich schon folgendes:

Code:
Public Class Form1

    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged

        Dim words As New List(Of String)

        words.Add("<html>")

        words.Add("</html>")

        words.Add("href=")



        If RichTextBox1.Text.Length > 0 Then

            Dim selectStart As Integer = RichTextBox1.SelectionStart

            'RichTextBox1.Select(0, RichTextBox1.Text.Length)

            RichTextBox1.SelectionColor = Color.Black

            RichTextBox1.DeselectAll()

            For Each oneWord As String In words

                Dim pos As Integer = 0

                Do While RichTextBox1.Text.ToUpper.IndexOf(oneWord.ToUpper, pos) >= 0

                    pos = RichTextBox1.Text.ToUpper.IndexOf(oneWord.ToUpper, pos)

                    RichTextBox1.Select(pos, oneWord.Length)

                    RichTextBox1.SelectionColor = Color.Blue

                    pos += 1

                Loop

            Next

            RichTextBox1.SelectionStart = selectStart
            RichTextBox1.SelectionLength = 0
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class


Das ist bisher alles und ich finds echt gut.
 
Hast du mal einen ziemlich langen Text in die RTF-Box kopiert und dann versucht den zu bearbeiten? Das ruckelt und wackelt vorne und hinten. Meiner Meinung nach ist die RTF-Box einfach nicht als Editor mit Highlighting geeignet.
Aber okay, der Code funktioniert. Du hast aber noch einen kleinen Bug drinnen, nämlich bleibt die SelectionColor auf Blue, nachdem du dein Highlighting durchgeführt hast. Das heißt der User tippt danach in blau anstatt in schwarz weiter.
Und warum fügst du die Wörter in deine words-Liste nicht gleich als Großbuchstaben ein? Das ist doch wesentlich performanter, als wenn du dann jedes Mal die ToUpper-Methode drauf anwendest.
Außerdem kannst du dir den Aufruf der ToUpper-Methode komplett sparen, indem du bei der IndexOf-Methode angibst, dass Groß- und Kleinbuchstaben als identisch gewertet werden sollen.
So würde ich's machen:
Code:
Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
    Dim words As New List(Of String)
    words.Add("<HTML>")
    words.Add("</HTML>")
    words.Add("HREF=")
    If RichTextBox1.Text.Length > 0 Then
        Dim selectStart As Integer = RichTextBox1.SelectionStart
        For Each oneWord As String In words
            Dim pos As Integer = 0
            Do
                pos = RichTextBox1.Text.IndexOf(oneWord, pos, System.StringComparison.OrdinalIgnoreCase)
                If pos > 0 Then
                    RichTextBox1.Select(pos, oneWord.Length)
                    RichTextBox1.SelectionColor = Color.Blue
                    pos += oneWord.Length
                Else
                    Exit Do
                End If
            Loop
        Next
        RichTextBox1.SelectionStart = selectStart
        RichTextBox1.SelectionLength = 0
        RichTextBox1.SelectionColor = System.Drawing.SystemColors.ControlText
    End If
End Sub
Der Code hat aber immer noch einen Bug:
Wenn du beispielsweise "<html>" eintippst, danach mit dem cursor an eine Stelle darin springst und dann beliebigen Text eingibst, beispielsweise "<ht hier irgendwas ml>" dann bleibt "<ht" und "ml>" weiterhin blau gefärbt.
 
Zuletzt bearbeitet:
Hallo,

Jeglich habe ich Deinen CoDe bei mir eingesetzt!

Resultat: Funktioniert nicht....

Mein QuellcoDe funktioniert zwar mit Bugs jeDoch highlitet er unD ich glaube auch langsam Das Du auch nicht richtig weißt was Du machst...

jeDenfalls gibts es noch ne Alternative wo festgelegt wir welche Wörter gefärbt werDen?

Also Das Dann praktiisch mit er InexOf Methoe umgesetzt wirD? Bloß Warum schlägst Du nicht nen QuellcoDe bzw- BeispielQuellcoDe vor

UnD Die besonDers große Frage ist, warum es nicht funktioniert.
 
Hallo,

Jeglich habe ich Deinen CoDe bei mir eingesetzt!

Resultat: Funktioniert nicht....

Mein QuellcoDe funktioniert zwar mit Bugs jeDoch highlitet er unD ich glaube auch langsam Das Du auch nicht richtig weißt was Du machst...

jeDenfalls gibts es noch ne Alternative wo festgelegt wir welche Wörter gefärbt werDen?

Also Das Dann praktiisch mit er InexOf Methoe umgesetzt wirD? Bloß Warum schlägst Du nicht nen QuellcoDe bzw- BeispielQuellcoDe vor

UnD Die besonDers große Frage ist, warum es nicht funktioniert.

Was funktioniert nicht?
Hab kein VB, hier aber Syntaktisch schaut er erstmal richtig aus, bis auf das ich die pos Prüfung mit >= 0 prüfen würde.

Ansonsten überdenke bitte deine Ausdrucksweise,
wir bekommen kein Geld dafür das wir uns deinen Problemen annehmen.
 
Es funktioniert einfach nicht, es sind direkt keine Fwehler jedoch der Syntax funktioniert nicht.

Mir ist es vollüg bewusst wie ich mich ausdrücke, bloß irgendwann platzt ein auch der Kragen wenn man keine Hilfe bekommt.
Warum solltet ihr auch Geld kriegen? Ihr werdet ja nicht verpflichtet sein euch hier anzumelden.

Wäre es nicht einfach möglich mit irgendeinem String und der RegEx Sache nahezukommen?
 
Zurück