Lokales Vergleichstool für GDL-Quelltexte (Archicad GDL/.gdl) und allgemeine Textdateien — pure HTML/CSS/JS, keine Frameworks, keine Build-Pipeline.
Vergleicht zwei Dateien Side-by-Side und zeigt, was inhaltlich identisch ist, was nur verschoben wurde, was sich subtil geändert hat und was komplett anders ist. Speziell auf GDL zugeschnitten — kennt Subroutinen, IF/ENDIF-Blöcke, Schleifen und behandelt sie als zusammenhängende Passagen.
- Hierarchischer Vergleich — eine „Passage" kann eine Zeile, ein
IF/ENDIF-Block, eineFOR/NEXT-Schleife, eineDO/LOOP-Schleife, eineWHILE/ENDWHILE-Schleife oder eine komplette Subroutine sein. Verschachtelung wird unterstützt. - Whitespace-Toleranz — Leerzeilen, Tabs, Mehrfach-Spaces und Einrückungen werden für den Vergleich ignoriert.
- Numerische Normalisierung —
18.40und18.4gelten als identisch (außerhalb von Strings). - Inline-Kommentare optional ignorieren —
! * VERALTET,! * Gusw. am Zeilenende werden standardmäßig nicht in den Vergleich einbezogen. - GDL-String-Aware —
'…'und"…"werden als String-Delimiter erkannt; einsame Anführungszeichen mitten im Text stören den Vergleich nicht. - Verschiebungs-Erkennung — Subroutinen oder Blöcke, deren Inhalt identisch ist, aber an anderer Position stehen, werden blau markiert.
- Token-Diff in modifizierten Zeilen — bei „ähnlich aber nicht gleich" werden nur die unterschiedlichen Tokens orange hervorgehoben, nicht die ganze Zeile.
- Synchronisierter Scroll vertikal und horizontal.
- GDL-Syntax-Highlighting im One-Dark-Stil.
- Drag & Drop für
.gdl,.txt,.bas,.lp_. - Dark/Light-Theme mit
localStorage-Persistenz.
| Marker | Farbe | Bedeutung |
|---|---|---|
| ✓ | Grün | 100 % identisch |
| ↕ | Blau | Identisch, aber an anderer Position |
| ~ | Orange | Ähnlich (Token-Diff inline markiert) |
| ! | Rot | Komplett anders / nur in einer Datei |
Keine Build-Pipeline nötig — index.html direkt im Browser öffnen oder als statische Site servieren.
- Repo nach einen geparkten Sites-Ordner klonen, z. B.
~/Sites/localhost/DiffChecker/. - Im Browser öffnen:
http://diffchecker.test/(Herd parkt Unterordner automatisch als<dirname>.test).
index.html als Document-Root verwenden — keine PHP-Verarbeitung nötig.
Funktioniert auch über file://, da die App reines Vanilla-JS mit ES-Modules verwendet. Modernen Browser empfohlen (Chrome, Firefox, Safari, neue Edge).
index.html UI-Skelett, Drop-Zonen, Diff-View
style.css Theme + Diff-Farben + One-Dark-Syntax
js/normalizer.js Whitespace + Inline-Kommentare + Zahlen normalisieren, Hashing (FNV-1a)
js/parser.js GDL-Block-Parser (rekursiver Passage-Baum)
js/diff.js Hierarchischer Diff (LCS + Hash-Match + Block-Match) + Modified-Pairing
js/chardiff.js Token-LCS für Inline-Highlight in modified-Pairs
js/highlight.js GDL-Tokenizer + sichere DOM-Erzeugung (kein innerHTML)
js/app.js Glue: Drag&Drop, Render, Sync-Scroll, Theme-Toggle
Algorithmus pro Hierarchie-Ebene:
- LCS auf Knoten-Hashes → exakte Position-Matches (✓ grün).
- Hash-Match in den verbleibenden Knoten → Verschiebungen (↕ blau).
- Block-Typ-Match → rekursiver Diff in der Sub-Hierarchie.
- Greedy-Prefix-Pairing → ähnliche, aber unterschiedliche Zeilen werden parallel als „modified" (~ orange) gepaart.
- Rest → nur in A oder nur in B (! rot).
MIT