YASHBox - Syntaxhighlighting - Zeilennummerierung

    • Beta

    Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Sinlyu.

      YASHBox - Syntaxhighlighting - Zeilennummerierung

      Ich möchte euch heute mein neues Projekt vorstellen.

      YASHBox
      Yet Another Syntax Highlighter - Box


      Funktionen:
      • Syntaxhighlighting mit 3 verschieden einstellbare Farben:
        1 - Die frei definierbare Wörteliste
        2 - für Strings (das Zeichen welches Strings einleitet & beendet kann eingestellt weden)
        3 - für Kommentare (das Zeichen welches Kommentare einleitet kann eingestellt werden)
        4 - für durch code in der yashbox hinzugefügte keywords (s.h. DefineString)
      • Zeilennummeriereung am rechten/linken (einstellbar) Rand


      Geplant:
      [*]Perfomanceverbesserung
      [/list]

      Eigenschaften:

      VB.NET-Quellcode

      1. YashBox1.KeyColor = Color.Blue 'Farbe die Benutzt wird um die Worter aus "KeyWords" zu Markieren
      2. YashBox1.KeyWords = New String() {"Public", "Class", "Private", "Sub", "ByVal", "As", "Handles", "MyBase", "End", "If", "New", "True", "False"}
      3. 'Groß& Kleinschreibung spielt keine ROLLE.
      4. YashBox1.Comment = "'" 'Das (die) Zeichen mit der die Kommentare beginnen
      5. YashBox1.CommentColor = Color.DarkGreen 'Die Farbe mit der die Kommentar markiert werden
      6. YashBox1.CountForeColor = Color.Gray 'Zeilennummerierung: 1. Verlauf - Farbe : STANDARD: GRAU
      7. YashBox1.CountBackColor = Color.White 'Zeilennummerierung: 2. Verlauf - Farbe : STANDARD: WEIß
      8. YashBox1.CountAlign = LeftRightAlignment.Left 'Zeilennummerierung Ausrichtung (linker/rechter Rand) STANDARD: LINKS
      9. YashBox1.HighlightEnabled = True 'Gibt an, ob gehighlighted werden soll. STANDARD: TRUE
      10. YashBox1.CountEnabled = True 'Gibt an ob die Zeilennummerierung aktiviert ist. STANDARD: TRUE
      11. YashBox1.CountFontColor = Brushes.Blue 'Die Schriftfarbe der Zeilennummerierung. STANDART: BLAU
      12. YashBox1.HighlightString = """" 'Zeichen mit dem die zu markierenden Strings beginnen und beendet werden.
      13. 'Standart ist wie bei Visual Basic dieses Zeichen: " .
      14. YashBox1.StringColor = Color.DarkRed 'Farbe mit der Strings markiert werden. STANDARD: Dunkelrot
      15. YashBox1.KeyWords2 = New String(){"siehe KeyWords"}
      16. Yashbox1.KeyColor2 = Color.Green 'die Farbe zu KeyWords2
      17. Yashbox1.IntegerColor = Color.Aqua 'Die Farbe mit der Zahlen markiert werden.
      18. YashBox1.DefineString = "#Define"
      19. YashBox1.DefineColor = YashBox1.KeyColor
      20. 'Beispiel zu DefineString & DefineColor:
      21. '#Define x as String ->> Im Weiteren Text der Box wird x immer mit der farbe DefineColor markiert.


      Screenshot:



      Download:
      Im Anhang (.RAR/.ZIP)


      Sonstiges:


      Programmiert wurde mit dem .net-Framework 2.0 unter VS 2008.



      Ganz wichtig wär mir das ihr das korrekte Darstellen der Zeilennummerierung testet, da ich die Befürchtung hab, das es an verschiedenen PCs anders aussieht.
      (DPI ist schon mit einbezogen in meine Berechnung)

      EDIT:
      NEUE VERSION!
      Die Zeilennummerierung geht nur bis zur letzten, benutzten Zeile.

      EDIT2:
      NEUE VERSION!
      Markierung von Zahlen (nicht in Verbindung mit Zeichen, d.h.: 1S --> hier wird die 1 nicht markiert. 11231 --> hier werden alle Zahlen markiert.
      2te. KeyWords Liste mit anderer Farbe.
      Markieren von im Text der YASHBOX definierten Konstanten.
      (vgl. "#Define" in C++)
      Druckfunktion wurde noch nicht umgesetzt.
      Dateien
      • YASH.zip

        (10,69 kB, 241 mal heruntergeladen, zuletzt: )
      • YASH.rar

        (10,1 kB, 185 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „magerquark“ ()

      Hi,
      das mit der Nummerierung nur soweit wie's auch Code gibt lässt sich leicht realisieren.
      Das die Darstellung der Nummerierung nicht 100%ig hin haut hab ich befürchtet... werds nochmal aufm zweitsystem testen.
      Leider komm ich heute erst am späten Nachmittag (vllt. sogar später Abend) zu.
      Lg, magerquark
      Mir ist da noch etwas eingefallen:

      • Warum gibt es eigentlich nur eine Keyword-Liste? Ich fände es klasse, wenn man auch noch eine 2. Liste hätte (Spezialbefehle, Einsprungpunkte, etc) (natürlich dann auch 2. Farbe)
      • Eine Erkennung von Bezeichnern (bsp: #define Test As Output oder #define Test As Input ==> Test wird in einer anderen Farbe geschrieben (auch im weiteren Verlauf)
      • Zahlenwerte lassen sich in einer anderen Farbe anzeigen

      • Last but not least: Eine Druckfunktion wäe klasse!
      "Warum gibt es eigentlich nur eine Keyword-Liste? Ich fände es klasse, wenn man auch noch eine 2. Liste hätte (Spezialbefehle, Einsprungpunkte, etc) (natürlich dann auch 2. Farbe)"
      Hatte anfangs 2 drin, dachte aber, dass es eh nur unübersichtlich ist und es nicht benötigt wird, kann ich aber gerne wieder einbauen.

      "Eine Erkennung von Bezeichnern (bsp: #define Test As Output oder #define Test As Input ==> Test wird in einer anderen Farbe geschrieben (auch im weiteren Verlauf)"
      Das wird warsch. nicht ganz so einfach, ich werde mich aber mal dran versuchen.

      "Zahlenwerte lassen sich in einer anderen Farbe anzeigen"
      Meinst du hierbei die Zeilennummerierung? Diese Farbe lässt sich einstellen.
      Oder willst du alle Zahlen in der Box mit einer bestimmten Farbe anzeigen lassen?
      Wenn ja - kein Problem, Regex sei dank.

      "Last but not least: Eine Druckfunktion wäe klasse!"
      Sowas hatte ich noch nie in einem Control, sollte sich aber auch realiseren lassen.

      magerquark schrieb:


      "Zahlenwerte lassen sich in einer anderen Farbe anzeigen"
      Meinst du hierbei die Zeilennummerierung? Diese Farbe lässt sich einstellen.
      Oder willst du alle Zahlen in der Box mit einer bestimmten Farbe anzeigen lassen?
      Wenn ja - kein Problem, Regex sei dank.


      Also ich meine, dass im Quelltext die Zahlen in einer Farbe gedruckt werden.

      Bsp:
      Dim Test As Integer = 123
      Schon wieder ich ...

      Bugs
      1. Wenn ich Strg + A drücke und dann Del (alles lösche), dann verschwindet auch die Zeilennummerierung!
      2. Die Performance muss verbessert werden! Wenn ich sehr schnell Text eingebe oder die Enter-Taste gedrückt halte, ruckelt die Darstellung und die Zeilennummerierung blinkt!


      EDIT: Noch ein Vorschlag: Einstellung der Schriftart!

      peterf1 schrieb:


      1. Wenn ich Strg + A drücke und dann Del (alles lösche), dann verschwindet auch die Zeilennummerierung!


      Das ist gewollt, schließlich geht die Zeilennummerierung nur bis zur letzten verwendeten Zeile.

      peterf1 schrieb:


      1. Die Performance muss verbessert werden! Wenn ich sehr schnell Text eingebe oder die Enter-Taste gedrückt halte, ruckelt die Darstellung und die Zeilennummerierung blinkt!


      Dieses Problem ist uns bekannt ;D
      GDI+ ist einfach zu lahm. Ich werde sehen was sich machen lässt, so schnell werde ich da aber nichts finden.
      Wenn du willst mach ich ne eigenschaft um den Verlauf ganz rauszunehmen, das Flackern verschwindet dann.

      Zur Schriftart muss ich schaun wie sich das auf die Zeilenhöhe auswirkt und ob ich das in meine Berechnung zur Zeilennummerierung mit einbinden kann.

      Für mich ist jetzt erstmal Schluss. (bis morgen warscheinlich)
      Kannst du das genauer erklären? Was ist mit einsprungpunkten gemeint?
      Meinst du, dass in deinem Beispiel dann das zweite Main markiert wird?
      Also einfach alles was hinter einem GoTo (oder einem anderen, definierbaren String) steht markiert wird?
      Also ich machs mal farbig:


      #define P1 As Output

      Main:
      'Nach Absatzdrücken wird Main rot
      SET P1 ON
      Wait 1 s
      SET P1 OFF
      Wait 1 s
      GOTO Main

      grün: Kommentar
      blau: Befehl in Keywordliste
      Rot: Erkanner Einsprung

      ######################################
      EDIT: Die Performance wäre wichtiger!
      EDIT2: Aber noch ein Vorschlag, der glaube ich wohl nicht umgesetzt werden kann. Aber trotzdem: Eine "Vorschlagfunktion wie bei VB 2008
      Ich bin jetzt aus dem Urlaub zurück und wollte nochmal die noch nötigen Verbesserungen zusammenfassen:
      • Die Performance
        Spoiler anzeigen
        Bei schneller Eingabe hinkt die Box, sowie die Zeilennummerierung blinkt


      • Markierung von Einsprungspunkten
        Spoiler anzeigen
        Der Einsprungspunkt Main (Sub) wird markiert und im weiteren Verlauf markiert (z.B.: rot). Entweder wird dieses "Main" immer gehighlightet oder nur nach GOSUB, GOTO etc.
        Main:

        'Nach Absatzdrücken wird Main rot

        SET P1 ON

        Wait 1 s

        SET P1 OFF

        Wait 1 s

        GOTO Main



        grün: Kommentar

        blau: Befehl in Keywordliste

        Rot: Erkanner Einsprung


      • Änderungsmöglichkeit der Schrift
        Spoiler anzeigen
        Die Schiftgröße, die "Standard"-Farbe und die Schirftart lassen sich auswählen. Falls dies nicht möglich sein sollte, wenigstens 2 Schiftarten (z.B.: Standart MS und Courier New) und mehrere Größen zur Auswahl. Jetztige Größe ist etwas klein!


      • BUG: Beim Einfügen
        Spoiler anzeigen
        Das Bild sagt alles...




      Ich weiß, das hier ist extrem viel, aber es soll ja nur eine Zusammenfassung sein

      VB.NET-Quellcode

      1. YashBox1.KeyWords = New String() {"[b]", "Class", "Private", "Sub", "ByVal", "As", "Handles", "MyBase", "End", "If", "New", "True", "False"}


      Dort ist ein KeyWord =

      Wenn ich das dann so eingebe wird es nicht blau aber Private oder Sub oder Handles werden blau! Schade! Vieleicht kannst du das Verbessern