AlignComment richtet Kommentare aus Update 13.08.2016

  • // Update 13.08.2016 erzwungene Kommentarposition
    // Wenn im Script irgendwo "aligncomment=POSITION" enthalten ist, werden die Kommentare an dieser Position/Spalte ausgerichtet, wenn diese Position eine andere ist, als von
    // AlignComment() berechnet!
    // bsp. aligncomment=45, es werden die Kommentare an Spalte 45 ausgerichtet.

    Hi,
    damit ein Script "schön" aussieht, benutzen einige von euch bereits Tidy (Link zur neuesten Beta) (Scite Ctrl+T). Leider werden damit alle Kommentare, die man per Semikolon abgetrennt hinter eine Zeile schreibt, direkt hinter dieser Zeile ausgerichtet.

    Manchmal ist es aber gewünscht, dass die Kommentare unabhängig von der Zeilenlänge der Codezeilen an einer bestimmten Spaltenposition ausgerichtet werden.
    Dies wird mit AlignComment erreicht.
    Dabei wird das auszurichtende Script per Kommandozeile an AlignComment übergeben, welches zunächst eine Sicherungskopie des Scriptes erstellt. Dann wird Tidy aufgerufen (falls installiert), eine Positionsspalte für die Kommentare errechnet und alle Kommentare an dieser Spalte ausgerichtet.
    Per Ctrl+Q (;~) auskommentierte Zeilen werden NICHT ausgerichtet bzw bleiben so erhalten, wie Tidy sie anlegt!
    Zeilen, die ausschliesslich einen Kommentar enthalten (also mit ; anfangen), werden in die Spalte geschrieben, in der auch die aktuellen Codezeilen stehen. Damit werden z.B. in 4 ineinandergeschachtelten For/To-Schleifen der Anfang der Kommentarzeilen zum Anfang der Codezeilen ausgerichtet.

    Zur Zeit ist es so, dass AlignComment so ausrichtet, dass 80% aller Codezeilen kürzer als die Kommentarposition ist. Das heisst, bei "langen" Zeilen wird der Kommentar einfach an die Zeile angehängt.
    Wer das ändern möchte, kann gern die Variable $faktor_align entsprechend anpassen.


    Damit man AlignComment aus Scite mit einem Tastendruck aufrufen kann, sollte man folgendermassen vorgehen:
    AlignComment im Verzeichnis "euerSciteVerzeichnis\AlignComment\AlignComment.au3" abspeichern.
    Dann in Scite die Datei SciteUser.properties (Optionen\Benutzer-Einstellungen öffnen) öffnen und folgende Zeilen eintragen:

    Code
    # 38 AlignComment
    command.38.*.au3="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\AlignComment\AlignComment.au3" "$(FilePath)"
    command.name.38.*.au3=AlignComment
    command.save.before.38.*.au3=1
    command.is.filter.38.*.au3=1
    command.shortcut.38.*.au3=F4


    F4 kann durch eine andere freie Tastenkombination ersetzt werden! Falls die #38 bereits in eurer SciteUser.properties enthalten ist, sucht die nächste freie Nummer und ersetzt alle 38er durch diese freie Nummer.

    Nun Scite einmal neustarten (sicher ist sicher^^) und ein Script mit vielen Kommentaren laden, F4 drücken und sich über die ausgerichteten Kommentare freuen^^! Viel Spass!


    Bitte Rückmeldung, ob AlignComment auch mit 64Bit-Systemen zurechtkommt. Ich habe es nur auf 32bit getestet, aber bis auf den Registry-Aufruf um das Tidy-Verzeichnis zu bekommen sollte es keine Probleme geben!
    Falls jemand AlignComment auch mit anderen Programmiersprachen bzw Kommentartrennern verwenden möchte, bitte Info!

    /EDIT/ die Schleifen von For $i = 0 To UBound($zeilen) - 2 nach For $i = 0 To UBound($zeilen) - 1 geändert.(s.Oscars Post). Das führt allerdings dazu, dass im 32-Bitmodus eine Leerzeile ans Script angehängt wird.

    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

    3 Mal editiert, zuletzt von Andy (5. Dezember 2015 um 13:25)

  • Hi Andy,
    ich finde die Funktion super, da die Quelltextformatierung dadurch wesentlich
    an Überblick gewinnt :thumbup: . Und ein gut formatierter Quelltext liest sich 1000fach besser.
    Leider müssten alle User diese Funktion stets vor dem Posten einsetzen und zusätzlich
    noch die AutoIt- und Spoilertags setzen :S .
    Trotzdem werd ich mir die Funkion mal archiviren. :thumbup:

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Zitat

    das muss "UBound($zeilen) - 1" heissen, sonst wird die letzte Skriptzeile gelöscht.

    Interessant, bei mir nicht, da Stringsplit() ans Array noch eine "Leerzeile" anhängt.
    Bei Ubound-1 führt das dann dazu, dass jedesmal eine Leerzeile ans Script angehängt wird, aber du hast Recht, besser meinen Tod gestorben als deinen^^
    Ich ändere das!

    • Offizieller Beitrag

    Andy.

    Dein Script ist Cool. Damit wird ja alles leserlich. :D
    Bis jetzt kommte ich noch keine Fehler feststellen. Das Tool ist ebenso nützlich wie OrganiceIncludes und darf nich fehlen.

    [OT]
    Gibt es irgendwo ein Script das die Zeilen automatisch in der Länge trimmt? Also Sinnvolle Umbrüche mittels _ durchführt?
    Irgendwo hab ich schon mal davon gelesen, weiß aber nicht mehr wo.
    Damit könnte man die Quellcodes dann leserlich für User anpassen, die keine Bildbreite von 1680 Zeichen benutzen.
    [/OT]

    Edit: Tidy macht mit den Umbrüchen das selbe wie mit den Comments. Da kann ich mit das schöne Formatieren nach _ auch sparen. ;(

  • Hi zusammen,
    durch meine nur rudimentären RegEx-Kenntnisse werden leider nicht 100%ig die Kommentare vom Programmcode getrennt.
    Daher kann es vorkommen, dass in bestimmten Kombinationen von ",´ und ; innerhalb von Programmzeilen einige Leerzeichen eingefügt werden. (z.B. bei structs). Bisher habe ich aber noch keinen "fehlerhaften" Programmcode provozieren können! Daher ist das eher ein kosmetisches Problem.

    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!

  • Hi zusammen,
    durch meine nur rudimentären RegEx-Kenntnisse werden leider nicht 100%ig die Kommentare vom Programmcode getrennt.
    Daher kann es vorkommen, dass in bestimmten Kombinationen von ",´ und ; innerhalb von Programmzeilen einige Leerzeichen eingefügt werden. (z.B. bei structs). Bisher habe ich aber noch keinen "fehlerhaften" Programmcode provozieren können! Daher ist das eher ein kosmetisches Problem.

    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!

    Hast du evtl. ein paar Testzeilen, welche Probleme bereiten? Ist/Soll

    Lg, Fabian

  • Hi,
    viele habe ich noch nicht gefunden^^, z.B.

    [autoit]

    $a = 'WCHAR lfFaceName [32];'

    [/autoit]

    .Bei den Scripten, bei denen ich AlignComment angewendet hatte (und das waren nicht wenige) hatte ich keine Fehler im Code bemerkt.

    Daher habe ich auch ehrlich gesagt kein grosses Problem damit. Aber eigentlich müsste die Kommentartrennung das doch jeder der gängigen Parser in den Editoren machen! Oder benutzen die eine "Universal-RegEx" und ändern nur das Trennzeichen?
    In der Suche z.B. auf https://autoit.de/www.regxlib.com finden sich einige....allerdings auch nicht funktionierende....

    • Offizieller Beitrag

    Andy
    Ich hatte ja mal ein Skript zur automatischen Variablendeklaration erstellt (Variablendeklaration automatisiert - Opt("MustDeclareVars", 1)). Da ist die Unterscheidung nach Kommentaren anhand #cs - #ce, #comments-start - #comments-end und ";" enthalten. Vielleicht kannst du das ja verwerten.

  • Hi zusammen,

    nach nunmehr 5 Jahren ein Micro-Update :D
    Es wurde eine Zeile hinzugefügt welche nun dazu führt, dass die Berechnung der Anzahl der Leerzeichen vom Endes des Codes bis zum Anfang des Kommentars "richtig" erfolgt.
    Ohne die Entfernung der bereits durch AlignComment eingefügten Leerzeichen konnte es bei Änderungen des Codes in Einzelfällen zu ungleichmäßigem Align kommen.

    • Offizieller Beitrag

    Super Sache das, ich benutze dein Script, seit du es das 1. mal veröffentlicht hast :thumbup:

  • Erhlich? Ich habe Tidy noch nicht genutzt.

    Aber das mit der Zeile weg oder dazu, wäre für mich nicht das Problem. Ich habe mir schon von Anfang an angewöhnt, bei Texten immer mit drei mal <Return> zu enden.
    Das liegt am Beruf. Erst alles in Stichworten tippen, dann diese von oben nach unten im gleichen Dokument ausarbeiten. So rutschen die Stichwörter automatisch nach oben an den ausgearbeiteten Text bis zum Ende. Wenn ich fertig bin x-mal <Entf> und dann drei mal <Return>. So braucht man nur die oberste Hälfte vom Monitor und unten kann man z. B. ein Ticketsystem laufen lassen, das man evtl. gleichzeitig überwachen muss. Okay, zweiter Monitor, aber der wird für andere Sachen bereits auf Arbeit genutzt.

    Und ob Tidy bei meinem deutschsprachigen und deutschdenkenden Hirn-Wirr-Warr überhaupt etwas bringen würde?! :rofl::Glaskugel::rofl:

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Wer aber dennoch eine "sichere" RegEx findet oder kennt um Kommentare vom Code zu trennen...


    Ich glaub, sowas hab ich in meiner Sammlung:
    (Mit der Zeile 6 lässt sich auch das Problem mit der Leerzeile am Schluß beheben...)


    Hier noch die "original" - Funktion mit welcher alle Comments entfernt werden können:
    Ich weiß leider nicht mehr, wer die Pattern geschrieben hat!

    AutoIt
    Func _RemoveComments(ByRef $sScript)
    	$sScript = StringRegExpReplace($sScript, '(?x)(?:\r?\n?\s*;.*)|' & '((?>"[^"]*")+|' & "(?>'[^']*')+)", "\1") ;entferne ;-Komments
    	$sScript = StringRegExpReplace($sScript, '(?i)(?:[\r\n]\s*)(\#ce|\#comments-end)(.*)', '$1') ;manche #ce haben noch Text dahinter
    	$sScript = StringRegExpReplace($sScript, '(?x)(?:\r?\n?\s*;.*)|(?s)\r?\n?\s*\#c(?>s|omments-start)(?>(?>"[^"]*")+|' & "(?>'[^']*')+|.)*?\#c(?>e|omments-end)(?-s)|" & '((?>"[^"]*")+|' & "(?>'[^']*')+)", "\1")
    EndFunc   ;==>_RemoveComments
  • @eukalyptus, vielen Dank!
    Aber seit 5 Jahren habe ich mit "meinem" RegEx keinen einzigen "Aussetzer" gehabt :party:
    Daher halte ich mich an die eiserne Grundregel Nummer Eins: "Never change a running system!" :thumbup:

    Btw., die aktuelle "Änderung" wurde ausschliesslich eingesetzt, um auch die beim AssembleIt_64() innerhalb von #cs/#ce (Comments-start/Comments-end) stehenden Assemblercode-Kommentare "schön" auszurichten. Dort hat nämlich nicht AlignComment ein Problem, sondern Tidy....teilweise waren die Kommentare unerklärlicherweise um 1-2 Leerzeichen versetzt. Was nun dazu führen kann, dass in Ausnahmefällen bei mehrmaligem Aufruf von AlignComment die Position der (nun gleichmäßig ausgerichteten) Kommentare ein bis zwei Leerzeichen nach links rutschen 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 (6. Dezember 2015 um 09:15)

  • sodele, kleines Update im 1. post

  • ;The Script should be placed in the Scite-Directory\AlignComment\AlignComment.au3

    Hm, das ist aber keine sichere Heimat für eigene Scripte, denn beim nächsten Update ist es doch futsch...

    Nachtrag:

    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. ;)

    Position55.png

    3 Mal editiert, zuletzt von Bitnugger (16. August 2016 um 01:29)