AlignComment richtet Kommentare aus Update 13.08.2016

  • Bei mir gab es keinen Registry-Schlüssel für Tidy... habe ihn aber nun angelegt - und wieder mal ist es eine '0', die Ärger macht.

    ooops, habe das auch gerade bei einer Neuinstallation von AutoIt auf Win10 festgestellt...macht aber nix, denn diese Zeilen hier

    Code
    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Tidy]
    
    [HKEY_CLASSES_ROOT\AutoIt3Script\Shell\Tidy\Command]
    @="\"C:\\Program Files (x86)\\AutoIt3\\SciTE\\Tidy\\Tidy.exe\" \"%1\""

    in Scite kopieren, dann daraus eine Datei TIDY.REG erstellen, diese Datei doppelklicken und den Eintrag in die Registry abnicken.

    AlignComment ruft dann auch Tidy auf.

  • Wer aber dennoch eine "sichere" RegEx findet oder kennt um Kommentare vom Code zu trennen (eigentlich benötigt man den Kommentartrenner doch in jeder Programmiersprache) bitte ich um Info!

    Da ich gerade im Zusammenhang mit dem finden der zugehörigen schließenden Tags zu den öffnenden in HTML darauf gestoßen bin:

    so etwas lässt sich wohl mit RegEx prinzipiell nicht fehlersicher lösen. M$ hat zwar in seine .Net-Implementierung eine Hilfsfunktion dafür eingebaut, die arbeitet aber auch nicht unter allen Bedingungen fehlerfrei.

    Um solche Probleme zu lösen, braucht man wohl einen Parser für die jeweilige Sprache, der den Quelltext von Anfang an durchgeht, sich dabei Zustandsänderungen merkt (z.B. Strings an den Anführungszeichen erkennt und entsprechend Flags setzt, wie "alles innerhalb Singlequotes wird nicht weiter interpretiert"), und damit Ziechen abhängig vom Kontext, in dem sie stehen, interpretiert.

    Ich weiß nicht, ob man den in Scite eingebauten Parser, der das Syntaxhilighting macht, evtl. abfragen kann dazu, als was er ein Semikolon an einer bestimmten Position interpretiert. Falls man die Schriftfarbe abfragen kann, könnte man das verwenden. Ich hab mich vor Jahren mal ein bischen damit beschäftigt, und meine, das müsste man abfragen können, bin aber nicht sicher.

  • Man muss das ja nicht mittels RegExp lösen.

    Ganz trivial: Gehe die Datei zeichenweise (!) durch. Wende dabei folgende Regeln an:

    1. Falls man auf die Sequenz #cs stößt, alles bis zur Sequenz #ce entfernen (ggf. auch die ausgeschriebene Variante beachten).
    2. Falls man auf das Zeichen ; stößt, alles bis zur Sequenz CRLF entfernen.
    3. Falls man auf das Zeichen " stößt, alles bis zum nächsten einzelnen " ignorieren.
    4. Falls man auf das Zeichen ' stößt, alles bis zum nächsten einzelnen ' ignorieren.

    Mir fällt so nichts ein, was das kaputt machen würde...

  • fakeraol ähhh, POST #12

    Dort hatte ich bereits geschrieben, dass nach 5 Jahren (mittlerweile sind es 7 Jahre) keine mir bekanntgewordenen Fehler mit demScript aufgetreten sind^^

    Falls man die Schriftfarbe abfragen kann, könnte man das verwenden.

    Ja, das wäre ein Ansatz...dann müsste man die User-Einstellungen abfragen, in Scite die Schriftfarbe für die Kommentare feststellen, und daraufhin ausrichten. Wer Lust hat, kann das gerne tun, ich bleibe beim Hieb auf F4 8)

    chesstiger

    Ich weiß nicht inwieweit deine "trivialen" Regeln dazu dienen sollen, die Kommentare auszurichten bzw. zu finden.

    Aber mach dir darüber keinen Kopf! :P

    Aktuell wäre ein "Tidy" für ASM-Code interessant:klatschen:

    Den auf Tastendruck "schön" ausgerichtet und eingerückt würde AssembleIt bestimmt aufwerten:theke:


    AlignComment funktioniert seit Jahren tadellos, einzig dass F4 mittlerweile in Scite für "Nachrichten" verwendet wird (wer braucht so etwas?!) stößt mir auf, ich habe aber keine Einstellung gefunden, um das zu ändern bzw. aus dem "Extras"-Menü zu entfernen. Egal, die SCITEUser.properties übersteuern glücklicherweise die "darunter" liegenden Einstellungen, von daher kein Problem.

    Wessen Herz am "F4" für die Nachrichten hängt, für den ist im Startpost und im Script beschrieben wie der Shortkey geändert werden kann.

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (4. Januar 2018 um 22:14)

  • chesstiger

    *mal advocatus diaboli spielen*

    Stößt man auf ", muß man prüfen, ob davor (z.B. innerhalb eines RegEx) nicht noch steht. Und evtl. noch einer, der diesen wiederum maskiert. Oder der " innerhalb einer Zeichengruppe [\\"',.] eines Regex. U.s.w., es gäbe leider sehr viel, was da theoretisch schief gehen könnte.

    Könnte man ja mal einen Kontest draus machen: Eine Gruppe entwirft solche Regeln, nach denen sich fehlerfrei z.B. Kommentare finden lassen sollen. Die andere schreibt einen (gültigen) Quelltext, bei dem diese Regeln versagen.

    • Offizieller Beitrag

    Mit Lua (der SciTE - internen Programmiersprache) lässt sich in einem (im Editor geöffneten) Skript, der durch den Lexxer festgestellte Typ abfragen. In der Lua - Sektion findet ihr Beispiel Code dafür (z. B. die Funktion SkipToComment in den OHK.Functions.

    Ich hatte dort auch eine Funktion gepostet, die Kommentare bereits beim Schreiben an vordefinierter Spaltenposition erstellt.

  • Andy

    Dann toi toi toi, ich wünsch Dir, daß das auch so bleibt. Allerdings, "wissen, daß bisher nichts schief gegangen ist" ist nicht das gleiche wie "wissen, warum aufgrund der Logik nichts schief gehen kann". ;)

    Obscurity bietet keine security.

    Ich blende z.B. ab und zu größere Source-Bereiche mal mit #cs #ce aus, und reaktiviere die dann u.U. auch mal per ; vor den #cs #ce.

    Einmal editiert, zuletzt von fakeraol (4. Januar 2018 um 23:19)

  • fakeraol

    Nein, \" muss man nicht beachten. In AutoIt maskiert man das mit einer Doppelung. Und da man von vorne nach hinten durchgeht, kann man alles nach einem " bis zu einem einzelnen " ignorieren. Wenn dazwischen zwei doppelte Anführungszeichen hintereinander oder beliebig viele einzelne Anführungszeichen stehen, werden die korrekterweise übergangen.

  • Ich blende z.B. ab und zu größere Source-Bereiche mal mit #cs #ce aus, und reaktiviere die dann u.U. auch mal per ; vor den #ce #ce.

    Na und? Das macht dem Script doch nichts. Es geht doch darum, per Tastendruck Kommentare auszurichten.

    Schlimmstenfalls stellst du fest, dass mit irgendeinem bisher nicht aufgetretenen Zeileninhalt AlignComment nicht (richtig) funktioniert.

    Dann postest du hier diese Zeile und wenn irgendwer Lust hat, dann wird AlignComment geändert oder du richtest bei deinem Script die Kommentare selbst aus^^

    "Security" besteht sowieso nicht.

    Btw. benutze ich zum "ein/auskommentieren" von Codeabschnitten CTRL+Q, wie im Startpost beschrieben werden diese Zeilen nicht ausgerichtet.

  • Falls man auf das Zeichen " stößt, alles bis zum nächsten einzelnen " ignorieren.

    Kleine Präzisierung: Alles bis zur nächsten ungeraden Anzahl an "

    Denn auch das wäre ein korrekter AutoIt-String: $Test = "Guten Tag"""""

    Könnte man ja mal einen Kontest draus machen: Eine Gruppe entwirft solche Regeln, nach denen sich fehlerfrei z.B. Kommentare finden lassen sollen. Die andere schreibt einen (gültigen) Quelltext, bei dem diese Regeln versagen.

    Habe gerade kein AutoIt zur Hand.

    Aber da du meintest mit RegEx lässt es sich nicht 100% sicher lösen, können wir ja erst einmal auf dieser Ebene bleiben.
    Mein Vorschlag hierzu: https://regex101.com/r/Scmfs6/8

    5 Mal editiert, zuletzt von AspirinJunkie (11. Januar 2018 um 07:10)

  • Ich werd ab jetzt mal meine Füße still halten. Ich sollte so spät nix mehr posten, ich hab da PHP im Hinterkopf gehabt, wo Zeichen mit nem Backslash maskiert werden, statt mit ner Verdopplung.

  • Nur damit keine Mißverständnisse aufkommen. Ich wundere mich die ganze Zeit darüber, dass hier trotz der zahlreichen Postings noch niemand gemerkt hat, dass #cs/#ce in AlignComment beabsichtigt NICHT beachtet werden!

    Wozu auch, welchen Sinn hat es, einen #cs/#ce-BLOCK der beabsichtigt Kommentare oder (wie im Fall von AssembleIt) Code enthält, an einer bestimmten Spalte auszurichten?!

    AlignComment macht genau das, was es soll, nämlich die Kommentare nach dem Semikolon auszurichten. Und das fehlerfrei seit 7 Jahren.

    Ich habe bisher immer noch keine Zeile AutoIt-Code erhalten, bei der das nicht funktioniert.

    Also bevor man hier "Verbesserungen" postet sollte man erst mal ein (einziges) Problem finden...

  • Ich wundere mich die ganze Zeit darüber, dass hier trotz der zahlreichen Postings noch niemand gemerkt hat, dass #cs/#ce in AlignComment beabsichtigt NICHT beachtet werden!

    [...]

    Also bevor man hier "Verbesserungen" postet sollte man erst mal ein (einziges) Problem finden...

    Ganz einfach: Wir haben deinen Thread gekapert ;)

    Ich bezog mich rein auf fakeraol's Hinweis, dass es nicht sicher möglich ist alle AutoIt-Comments (und da gehören halt die Blöcke mit dazu) per RegEx sauber zu matchen.

    Nicht mehr - aber auch nicht weniger. Ist OT ich weiß. Aus meinem Pattern lassen sich die Blöcke aber ganz fix entfernen wer das möchte.

    Ich habe bisher immer noch keine Zeile AutoIt-Code erhalten, bei der das nicht funktioniert.

    Ich kann hier gerade wie gesagt kein AutoIt testen aber folgende Zeile aus deinem eigenen Skript - behandelt dein Tool diese korrekt?:

    AutoIt
      Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr')
    • Offizieller Beitrag

    Den auf Tastendruck "schön" ausgerichtet und eingerückt würde AssembleIt bestimmt aufwerten

    Ich habe mir für meine ASM-Codes ein kleines Script geschrieben, mit dem ich die Kommentare an einer bestimmten Position ausrichten kann.

    Man kann das Formatierungsscript in sein Script kopieren, das Script starten und hat den neu kommentierten ASM-Code in der Zwischenablage.

    Voraussetzung ist allerdings dass der ASM-Code zwischen "#Region ASM-Code" und "#EndRegion" steht.

    Das ist jetzt zwar kein Tidy für ASM, aber zumindest zum ausrichten der Kommentare zu gebrauchen. Auskommentierte Zeilen werden nicht eingerückt.

    Hier mal mit ASM-Beispielcode (unformatierte Kommentare):

  • Oscar ,

    wie gesagt, AlignComment richtet "automatisch" aus, auch die in Regions eingepackten Kommentare.

    Über ein "Tidy" sollte man sich aber auch Gedanken machen.

    Eigentlich wäre es garnicht mal schlecht, eine wieauchimmer-Ausrichtung der Kommentare in AssembleIt zu integrieren.

    Ich haue nach einigen Zeilen Codeänderung sowieso reflexartig auf F4, wäre mal zu überlegen das zu F5 dazuzupacken....

    AspirinJunkie

    Ich kann hier gerade wie gesagt kein AutoIt testen aber folgende Zeile aus deinem eigenen Skript - behandelt dein Tool diese korrekt?:

    Ja.

    Schönes Regex übrigens, hab ich mir ausgedruckt (kein Witz) und abgehängt. Damit man, bevor man dran denkt die TODO´s abzuhandeln, beim Ordner aufschlagen direkt sieht, wo der Hammer hängt:rock:

    alle AutoIt-Comments (und da gehören halt die Blöcke mit dazu) per RegEx sauber zu matchen.

    Nicht mehr - aber auch nicht weniger. Ist OT ich weiß. Aus meinem Pattern lassen sich die Blöcke aber ganz fix entfernen wer das möchte.

    Klasse!

  • Ja, daher ein "ASM-Tidy". Vielleicht gibt es ja so etwas schon "fertig", ggf als Programm/Script.

    Das Autoit-Tidy zerschiesst ja leider den eingerückten ASM-Code. Ich frage mal an, ob es in Tidy eine Option gibt bestimmte Teile des Scripts von der Tidyfunktion auszunehmen.

    • Offizieller Beitrag

    Ich selbst benutze Tidy nicht, formatiere immer schon beim Schreiben.

    Wenn aber da echt Bedarf besteht, ein individuell anpassbares Tidy zu erstellen, würde ich das mal in meine Agenda packen. Ich würde dann aber das ganze als SciTE-Plugin in Lua schreiben. Die gewünschten Optionen müsstet ihr dann mal zusammen stellen.

  • Kein Fehler... aber unschön ist, dass der Kommentar nach EndFunc auch ausgerichtet wird. :saint:

    Das Autoit-Tidy zerschiesst ja leider den eingerückten ASM-Code. Ich frage mal an, ob es in Tidy eine Option gibt bestimmte Teile des Scripts von der Tidyfunktion auszunehmen.

    Ja, die gibt es...

    Einmal editiert, zuletzt von Bitnugger (6. Januar 2018 um 06:35)