Ich habe einen XML-Texteditor geschrieben , der zwei Ansichtsoptionen für denselben XML-Text bietet, einen eingerückt (virtuell), den anderen linksbündig. Die Motivation für die linksbündige Ansicht besteht darin, den Benutzern zu helfen, die Whitespace-Zeichen, die sie zum Einrücken von Klartext- oder XPath-Code verwenden, ohne Beeinträchtigung durch Einrückungen, die ein automatischer Nebeneffekt des XML-Kontexts sind, zu "sehen".
Ich möchte visuelle Hinweise (im nicht bearbeitbaren Teil des Editors) für den linksbündigen Modus geben, die dem Benutzer helfen, ohne jedoch zu aufwendig zu werden.
Ich habe versucht, nur Verbindungsleitungen zu verwenden, aber das schien zu beschäftigt zu sein. Das Beste, was ich bisher gefunden habe, ist in einem Screenshot des Editors unten dargestellt, aber ich suche nach besseren / einfacheren Alternativen (die nicht zu viel Code erfordern).
[Bearbeiten]
Ausgehend von der Heatmap-Idee (von: @jimp) erhalte ich diese und 3 Alternativen - bezeichnet mit a, b und c:
Im folgenden Abschnitt wird die akzeptierte Antwort als Vorschlag beschrieben, in dem Ideen aus einer Reihe anderer Antworten und Kommentare zusammengefasst werden. Da diese Frage jetzt Community-Wiki ist, können Sie sie gerne aktualisieren.
NestView
Der Name für diese Idee, die eine visuelle Methode zur Verbesserung der Lesbarkeit von verschachteltem Code ohne Einrückung bietet.
Umriss
Der Name für die unterschiedlich schattierten Linien in NestView
Das obige Bild zeigt das NestView, das zur Visualisierung eines XML-Snippets verwendet wird. Obwohl für diese Abbildung XML verwendet wird, könnte für diese Abbildung jede andere Codesyntax verwendet werden, die Verschachtelung verwendet.
Ein Überblick:
Die Konturlinien sind (wie in einer Heatmap) schattiert, um die Verschachtelungsebene anzuzeigen
Die Konturlinien sind abgewinkelt, um anzuzeigen, wann eine Verschachtelungsebene geöffnet oder geschlossen wird.
Eine Konturlinie verbindet den Anfang einer Verschachtelungsebene mit dem entsprechenden Ende.
Die kombinierte Breite der Konturlinien gibt zusätzlich zur Heatmap einen visuellen Eindruck der Verschachtelungsebene.
Die Breite von NestView kann manuell geändert werden, sollte sich jedoch nicht ändern, wenn sich der Code ändert. Konturlinien können entweder komprimiert oder abgeschnitten werden, um dies zu erreichen.
Leerzeilen werden manchmal als Code verwendet, um Text in besser verdauliche Teile aufzuteilen. Solche Zeilen können im NestView ein spezielles Verhalten auslösen. Beispielsweise könnte die Heatmap zurückgesetzt werden oder eine Konturlinie mit Hintergrundfarbe verwendet werden oder beides.
Eine oder mehrere Konturlinien, die dem aktuell ausgewählten Code zugeordnet sind, können hervorgehoben werden. Die Konturlinie, die der ausgewählten Codeebene zugeordnet ist, wird am stärksten hervorgehoben. Es können jedoch auch andere Konturlinien aufleuchten, um die enthaltene verschachtelte Gruppe hervorzuheben
Mit dem Klicken / Doppelklicken auf eine Konturlinie können unterschiedliche Verhaltensweisen (z. B. Falzen von Code oder Auswahl von Code) verknüpft werden.
Unterschiedliche Teile einer Konturlinie (Vorder-, Mittel- oder Hinterkante) können unterschiedliche dynamische Verhalten aufweisen.
QuickInfos können angezeigt werden, wenn Sie den Mauszeiger über eine Konturlinie bewegen
Das NestView wird kontinuierlich aktualisiert, während der Code bearbeitet wird. Wenn die Verschachtelung nicht ausbalanciert ist, können Annahmen getroffen werden, wo die Verschachtelungsebene enden soll, aber die zugehörigen temporären Konturlinien müssen in gewisser Weise als Warnung hervorgehoben werden.
Drag & Drop-Verhalten von Konturlinien kann unterstützt werden. Das Verhalten kann je nach dem Teil der Konturlinie variieren, der gezogen wird.
Funktionen, die häufig am linken Rand zu finden sind, wie Zeilennummerierung und farbige Hervorhebung bei Fehlern und Statusänderungen, können das NestView überlagern.
Zusätzliche Funktionalität
Der Vorschlag befasst sich mit einer Reihe zusätzlicher Probleme - viele liegen außerhalb des Rahmens der ursprünglichen Frage, sind jedoch ein nützlicher Nebeneffekt.
Visuelles Verknüpfen von Anfang und Ende einer verschachtelten Region
Die Konturlinien verbinden den Anfang und das Ende jeder verschachtelten Ebene
Hervorheben des Kontexts der aktuell ausgewählten Zeile
Wenn Code ausgewählt ist, kann die zugehörige Verschachtelungsebene in der NestView hervorgehoben werden
Unterscheidung zwischen Coderegionen auf derselben Verschachtelungsebene
Im Fall von XML können für verschiedene Namespaces unterschiedliche Farbtöne verwendet werden. Programmiersprachen (wie c #) unterstützen benannte Regionen, die auf ähnliche Weise verwendet werden könnten.
Unterteilen von Bereichen innerhalb eines Sammelbereichs in verschiedene visuelle Blöcke
Zusätzliche Zeilen werden häufig in den Code eingefügt, um die Lesbarkeit zu verbessern. Solche leeren Zeilen könnten verwendet werden, um den Sättigungsgrad der NestView-Konturlinien zurückzusetzen.
Mehrspaltige Codeansicht
Code ohne Einrückung macht die Verwendung einer mehrspaltigen Ansicht effektiver, da ein Zeilenumbruch oder horizontales Scrollen weniger wahrscheinlich ist. In dieser Ansicht fließt der Code, sobald er das Ende einer Spalte erreicht hat, in die nächste:
Verwendung, die über die bloße Bereitstellung einer visuellen Hilfe hinausgeht
Wie in der Übersicht vorgeschlagen, könnte NestView eine Reihe von Bearbeitungs- und Auswahlfunktionen bieten , die im Großen und Ganzen den Erwartungen eines TreeView-Steuerelements entsprechen. Der Hauptunterschied besteht darin, dass ein typischer TreeView-Knoten aus zwei Teilen besteht: einem Expander und dem Knotensymbol. Eine NestView-Konturlinie kann bis zu drei Teile haben: einen Öffner (abfallend), einen Verbinder (vertikal) und einen Schließer (abfallend).
Einrückung
Das NestView wird zusammen mit nicht eingerückten Code-Ergänzungen angezeigt, wird jedoch wahrscheinlich die herkömmliche eingerückte Code-Ansicht nicht ersetzen.
Es ist wahrscheinlich, dass alle Lösungen, die NestView verwenden, eine Methode bieten, mit der nahtlos zwischen eingerückten und nicht eingerückten Codeansichten gewechselt werden kann, ohne dass sich dies auf den Codetext selbst auswirkt - einschließlich Leerzeichen. Eine Technik für die eingerückte Ansicht wäre "Virtuelle Formatierung", bei der ein dynamischer linker Rand anstelle von Tabulator- oder Leerzeichen verwendet wird. Dieselben Verschachtelungsebenendaten, die zum dynamischen Rendern von NestView verwendet werden, können auch für die herkömmlichere Ansicht mit eingerückten Rändern verwendet werden.
Einrückungen sind wichtig für die Lesbarkeit des gedruckten Codes. In diesem Fall bedeutet das Fehlen von Tabulator- / Leerzeichen und einem dynamischen linken Rand, dass der Text am rechten Rand umgebrochen werden kann und trotzdem die Integrität der eingerückten Ansicht erhalten bleibt. Zeilennummern können als visuelle Markierungen verwendet werden, die angeben, wo der Code in Worte gefasst ist, und auch die genaue Position der Einrückung:
Screen Real-Estate: Flat Vs Indented
Beantwortung der Frage, ob der NestView wertvolle Bildschirmfläche verbraucht:
Konturlinien funktionieren gut mit einer Breite, die der Zeichenbreite des Code-Editors entspricht. Eine NestView-Breite von 12 Zeichen kann daher 12 Verschachtelungsebenen aufnehmen, bevor Konturlinien abgeschnitten / komprimiert werden.
Wenn eine eingerückte Ansicht 3 Zeichenbreiten für jede Verschachtelungsebene verwendet, wird Platz gespart, bis die Verschachtelung 4 Verschachtelungsebenen erreicht. Nach dieser Verschachtelungsebene hat die flache Ansicht einen platzsparenden Vorteil, der mit jeder Verschachtelungsebene zunimmt.
Hinweis: Für Code wird häufig ein Einzug von mindestens 4 Zeichen empfohlen, XML kann jedoch häufig mit weniger Zeichen auskommen. Durch die virtuelle Formatierung kann außerdem weniger Einrückung verwendet werden, da kein Risiko für Ausrichtungsprobleme besteht
Ein Vergleich der beiden Ansichten ist nachfolgend dargestellt:
Auf der Grundlage der obigen Ausführungen ist es wahrscheinlich gerechtfertigt, den Schluss zu ziehen, dass die Auswahl des Ansichtsstils auf anderen Faktoren als Bildschirmimmobilien basiert. Die einzige Ausnahme ist, wenn der Platz auf dem Bildschirm knapp ist, z. B. auf einem Netbook / Tablet oder wenn mehrere Codefenster geöffnet sind. In diesen Fällen scheint das in der Größe veränderbare NestView ein klarer Gewinner zu sein.
Anwendungsfälle
Beispiele für Beispiele aus der Praxis, bei denen NestView eine nützliche Option sein kann:
Wo Bildschirmimmobilien an erster Stelle stehen
ein. Auf Geräten wie Tablets, Notizblöcken und Smartphones
b. Beim Anzeigen von Code auf Websites
c. Wenn mehrere Codefenster gleichzeitig auf dem Desktop angezeigt werden sollen
Wo konsistente Leerzeichen Einrückung von Text im Code eine Priorität ist
Zum Überprüfen von tief verschachteltem Code. Zum Beispiel, wenn Untersprachen (z. B. Linq in C # oder XPath in XSLT) einen hohen Verschachtelungsgrad verursachen können.
Barrierefreiheit
Anpassungs- und Farboptionen müssen bereitgestellt werden, um Sehbehinderten zu helfen und um den Umgebungsbedingungen und persönlichen Vorlieben gerecht zu werden:
Kompatibilität des bearbeiteten Codes mit anderen Systemen
Eine Lösung mit einer NestView-Option sollte idealerweise in der Lage sein, führende Tabulator- und Leerzeichen (die nur eine Formatierungsrolle haben) aus importiertem Code zu entfernen. Sobald der Code entfernt wurde, konnte er ohne Änderungen sowohl in der linksbündigen als auch in der eingerückten Ansicht sauber gerendert werden. Für viele Benutzer, die sich auf Systeme wie Mergen und Diff-Tools verlassen, die keine Whitespace-Kenntnisse haben, ist dies ein großes Problem (wenn nicht sogar ein kompletter Show-Stopper).
Andere Arbeiten:
Visualisierung überlappender Markups
Die veröffentlichte Studie von Wendell Piez aus dem Jahr 2004 befasst sich mit der Visualisierung von überlappenden Markups , insbesondere LMNL . Dies beinhaltet SVG-Grafiken mit signifikanten Ähnlichkeiten zum NestView-Vorschlag. Sie werden hier als solche anerkannt.
Die visuellen Unterschiede sind in den Bildern (unten) deutlich zu erkennen. Der wichtigste funktionale Unterschied besteht darin, dass NestView nur für gut verschachteltes XML oder Code gedacht ist, während Wendell Piez Grafiken so gestaltet sind, dass sie überlappende Verschachtelungen darstellen.
Die obigen Grafiken wurden - mit freundlicher Genehmigung - von http://www.piez.org reproduziert
Quellen: