pb

Der Pascal Beautifier “PB”

PB ist ein kommandozeilen-orientiertes Programm, das Delphi/Pascal-Sourcen (mit der Extension “.pas”) liest und umformatiert.

Ich stelle es zum Download zur Verfügung. Und hier zeigt ein Beispiel, wie es wirkt.

Die Aufrufsyntax ist (Gross/Kleinschreibung beliebig):

PB.EXE [<File>] [/?] [/H] [/I<n>] [/D<n>] [/BR] [/BS] [/LR] [/LS] [/K] [/SK]
       [/T<n>] [/DO] [/NOLOGO]

Option

Bedeutung

<file>

Die zu formatierende Datei. Inhalt wird durch formatierte Source ersetzt, das Oriignal wird unter der extenson “.bak” gespeichert. Im Fehlerfall bleibt der Inhalt unverändert.
Wird <file> nicht angegeben, wird von stdin nach stdout formatiert.

/H, /?

Ausgabe dieser Hilfe

/I<n>

Automatisches Einrücken AN, pro Ebene <n> Spaces

/D<n>

Automatische Kommentare (“auto doc”) nach CASE etc. AN
Automatische Kommentare erst <n> Zeilen nach dem Ursprung

/DO

DirectOut: Source und Fehler während der Formatierung auf den Schirm ausgeben

/FI

Identifier so schreiben wie beim ersten Auftreten in der Source (ohne Berücksichtigung von scopes oder Objekt-Zugehörigkeiten)

/BS

Programmstrukturierende "Reserved Words" gross schreiben

/BR

sonstige "Reserved Words" gross

/LS

Programmstrukturierende "Reserved Words" klein schreiben

/LR

sonstige "Reserved Words" klein

/K

Kommentare ausfiltern

/SK

Space-kompression, Spaces in Source zusammenfassen

/T<n>

Tabs in Source im Abstand <n> Spalten expandieren.

/NOLOGO

Unterdrücke Schlusskommentar "Formatted by PB.EXE..."

Aufruf ohne Parameter: Formatieren von stdin nach stdout mit Standard-Einstellungen') ;
 

Features

  • PB versteht die Blockstruktur und rückt Zeilen entsprechend ihrerer syntaktischen Ebene nach rechts ein (“indentation”). Das Maß der Einrückung (Spaces pro Level) wird mit der Option “/in” angegeben.
     
  • Schlüsselwörter können GROSS oder klein geschrieben werden.  Es gibt zwei Klassen von Schlüsselwörtern.
     a) “struct words” : Worte, die die Programmstruktur beschreiben. Sie kommen nie in Ausdrücken vor, etwa BEGIN, END, DO, WHILE, ...
    GROSS-Schreibung mit der Option “/bs”, Kleinschreibung mit “/ls”.
    b) sonstige “reserved words”. Das sind die meisten Schlüsselwörter von Delphi, sie können auch Identifier sein. Beispiele: ABSTRACT, DIV, STRING, OBJECT ...
    GROSS-Schreibung mit der Option “/br”, Kleinschreibung mit “/lr”.
     
  •  Kommentare, Leerzeilen, und Mehrfach-Spaces können ausgefiltert werden. Option "/k"
     
  • Automatische Dokumentation. Option: "/dn".
    Fügt nach BEGINs u. ENDs Kommentare ein (wenn da nicht schon einer steht), die angeben, zu welcher übergeordneten Struktur das BEGIN/END gehört.
    Das passiert aber nur, wenn der Abstand zum Anfang der Struktur größer als "n" Zeilen ist.
     
  • Formatierung von Identifiern: Option “/fi”. Identifier bzgl. Grosss/Kleinschreibung so schreiben, wie beim ersten Vorkommen in der Source.
    Dabei wird der scope nicht verstanden. Beispiel: alle Variablen mit Namen “MyVar” werden gleich geschrieben, egal ob sie lokal oder global definiert werden.
     
  • Mit “/sk” können Spaces in der Source komprimiert werden. Mit “/Tn” wird der Tabstop für Tabulatorzeichen in der Source angegeben.
     
  •  Wenn PB mehrmals hintereinander mit gleichen Optionen auf einen Quelltext losgelassen wird, ändert sich nichts mehr; es stellt im mathematischen Sinne eine Projektion dar.
     
  • Zeilenenden bleiben ausdrücklich erhalten, d.h., PB erhält immer die Anzahl der Zeilen.
     
  • PB versteht “{$ifdef}” nicht und ignoriert es. “$ifdef“ darf also nur so eingesetzt werden , dass die Blockstruktur nicht durcheinander kommt:

    Beispiel für guten Einsatz:

    Beispiel für “falschen” Einsatz:

    {$ifdef TEST_A}
      if a > 0 then begin
       x := 0 ;
      end ;
    {$else}
      if b > 0 then begin
       x := 0 ;
      end ;
    {$endif}

    {$ifdef TEST_A}
      if a > 0 then begin
    {$else}
      if b > 0 then begin
    {$endif}
       x := 0 ;
      end ;
     


  • Falls PB einen syntaktischen Fehler bemerkt (z.B., wenn das abschließende “end .” nicht den niedrigsten Einrückgrad hat), wird auf jeden Fall die Originaldatei unverändert zurückgegeben.
     
  • Die Laufzeit von PB wurde künstlich verlängert (das macht man nicht so oft, oder?) und beträgt immer mindestens zwei Sekunden, damit die neu erzeugte Datei garantiert einen neueren Zeitstempel als das Original hat. Andernfalls würde die Delphi-IDE nicht bemerken, dass sich die Datei geändert hat.
     
  • Beispiel für die Integration in Delphi-IDE im Menü “Tools”:

[Desktop] [Scriptor] [Localizr] [pb] [LED-Laufschrift] [AutoGamer] [EthoScenes] [EosAutoShooter deutsch] [EosAutoShooter english]