Podświetlanie składni XML w RichTextBox

0

Witam.

Zna ktoś może jakąś bibliotekę, która dodaje do kontrolki RichTextBox cechę podświetlania składni XML'a ?

Dzięki.

0

Czy w kontrolce tej można łatwo podświetlać (robić tło liter) za pomocą prostej metody ? - nie pamiętam .. bo jeśli tak to samemu można napisać sobie takie coś:

using System.Text.RegularExpressions (wyrażenia regularne)

Podświetlić wszystko co odpowiada <.> (chyba dobrze napisałem), jeśli nie to <.>

Ewentualnie: http://www.google.pl/search?hl=pl&q=RichTextBox+XML+highlight&lr=

0

Tak nie działa ;/

Jak znaleźć wszystkie elementy xml ?

  • <tag>
  • <tag
  • </tag>
  • <tag />
Regex regExp = new Regex(@"<[\w]+>", RegexOptions.IgnoreCase | RegexOptions.Multiline);

Match m = regExp.Match(xml);

for (int i = 0; i < m.Groups.Count; i++)
{
    System.Console.WriteLine(m.Groups[i].Value);
}
0

Regex regExp = new Regex(@"<[\w]+>", RegexOptions.IgnoreCase | RegexOptions.Multiline);

Dodam tylko, że tym sposobem nie zaznaczysz tagów XML z atrybutem lub choćby spacją oraz zamykających <font size="4"></...</span>

Trzeba by to zmodyfikować..

<font size="4"><\w*[a-zA-Z 0-9"'=]*></span>
// teraz zaznaczysz tagi zwykłe i z atrybutem param="value" lub param='value'

<font size="4"></\w*[a-zA-Z 0-9"'=]*></span>
// to samo co wyżej ale dla zamykających

..więc w ostateczności

Regex regExp = new Regex(@"(<\w*[a-zA-Z 0-9"'=]*>)|(</\w*[a-zA-Z 0-9"'=]*>)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
0

Hmm a masz może pomysł jak by zrobić takie podświetlanie składni XML ?

Rozumie, wyrażeniami wyszukuje elementy XML, ale nie wiem zbytnio jak to odczytywać i zapisywać bezpośrednio w kontrolce już zmienione elementy - czyli dodane kolory, żeby to tak płynnie było.

Dzięki.

0

http://www.google.pl/search?hl=pl&q=C%23+RichTextBox+syntax+highlight&lr=

Z przykładów, które przejrzałem jest to dość skomplikowane - ponieważ zmianę koloru fragmentu tekstu uzyskuje się przez wcześniejsze zaznaczenie go, a następnie RichTextBox.SelectionColor() i odznaczenie (sposób trochę na około), ale nie wiem jak inaczej można zmienić formatowanie fragmentu tekstu w RichTextBox (można by zajrzeć w budowę RTF).

W każdym razie działa to (słabo ale działa). Pamiętaj o ukryciu zaznaczenia przy operacji kolorowania, inaczej okienko będzie migać.

protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            if (m.Msg == WM_PAINT)
            {
                if (_Paint) base.WndProc(ref m);
                else
                {
                    m.Result = IntPtr.Zero; 
                }
            }
            else
                base.WndProc(ref m);

        }

_Paint to zmienna (bool), która decyduje czy ma być widoczne zaznaczanie tekstu czy też nie.

Na końcu wypadało by jeszcze postawić kursor tam gdzie był przed zakolorowaniem (wszystko masz w linku, który podałem - pierwsze 5 wyszukań)

1 użytkowników online, w tym zalogowanych: 0, gości: 1