Skip to content

gdl-joe/diffchecker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DiffChecker

Lokales Vergleichstool für GDL-Quelltexte (Archicad GDL/.gdl) und allgemeine Textdateien — pure HTML/CSS/JS, keine Frameworks, keine Build-Pipeline.

Was es macht

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.

Features

  • Hierarchischer Vergleich — eine „Passage" kann eine Zeile, ein IF/ENDIF-Block, eine FOR/NEXT-Schleife, eine DO/LOOP-Schleife, eine WHILE/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 Normalisierung18.40 und 18.4 gelten als identisch (außerhalb von Strings).
  • Inline-Kommentare optional ignorieren! * VERALTET, ! * G usw. 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.

Status-Marker

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

Setup

Keine Build-Pipeline nötig — index.html direkt im Browser öffnen oder als statische Site servieren.

Lokal mit Laravel Herd (macOS)

  1. Repo nach einen geparkten Sites-Ordner klonen, z. B. ~/Sites/localhost/DiffChecker/.
  2. Im Browser öffnen: http://diffchecker.test/ (Herd parkt Unterordner automatisch als <dirname>.test).

Lokal mit MAMP / Apache / Nginx

index.html als Document-Root verwenden — keine PHP-Verarbeitung nötig.

Direkt aus dem Dateisystem

Funktioniert auch über file://, da die App reines Vanilla-JS mit ES-Modules verwendet. Modernen Browser empfohlen (Chrome, Firefox, Safari, neue Edge).

Architektur

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:

  1. LCS auf Knoten-Hashes → exakte Position-Matches (✓ grün).
  2. Hash-Match in den verbleibenden Knoten → Verschiebungen (↕ blau).
  3. Block-Typ-Match → rekursiver Diff in der Sub-Hierarchie.
  4. Greedy-Prefix-Pairing → ähnliche, aber unterschiedliche Zeilen werden parallel als „modified" (~ orange) gepaart.
  5. Rest → nur in A oder nur in B (! rot).

Lizenz

MIT

About

GDL-aware Side-by-Side text diff tool for Archicad GDL and general text files — pure HTML/CSS/JS

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors