J'ai écrit un éditeur de texte XML qui offre 2 options d'affichage pour le même texte XML, l'une indentée (pratiquement), l'autre justifiée à gauche. La vue justifiée à gauche a pour but d'aider les utilisateurs à «voir» les caractères d'espacement qu'ils utilisent pour l'indentation de texte brut ou de code XPath, sans interférence due à l'indentation, qui est un effet secondaire automatisé du contexte XML.
Je souhaite fournir des indices visuels (dans la partie non modifiable de l'éditeur) pour le mode justifié à gauche, ce qui aidera l'utilisateur, mais sans être trop élaboré.
J'ai juste essayé d'utiliser des lignes de connexion, mais cela semblait trop occupé. Le meilleur de ce que j'ai créé jusqu'à présent est présenté dans une copie d'écran fictive de l'éditeur ci-dessous, mais je cherche des alternatives meilleures / plus simples (qui ne nécessitent pas trop de code).
[Modifier]
En prenant l’idée de la heatmap (de: @jimp), j’obtiens ceci et 3 alternatives - étiquetées a, b et c:
La section suivante décrit la réponse acceptée en tant que proposition, en rassemblant les idées de plusieurs autres réponses et commentaires. Comme cette question est maintenant un wiki de communauté, n'hésitez pas à le mettre à jour.
NestView
Le nom de cette idée qui fournit une méthode visuelle pour améliorer la lisibilité du code imbriqué sans utiliser l’indentation.
Lignes de contour
Le nom des lignes ombrées différemment dans NestView
L'image ci-dessus montre le NestView utilisé pour visualiser un extrait de code XML. Bien que XML soit utilisé pour cette illustration, toute autre syntaxe de code utilisant l'imbrication aurait pu être utilisée pour cette illustration.
Un aperçu:
Les lignes de contour sont ombrées (comme dans une carte thermique) pour indiquer le niveau d'imbrication
Les lignes de contour sont inclinées pour indiquer quand un niveau d'imbrication est en cours d'ouverture ou de fermeture.
Une ligne de contour relie le début d'un niveau d'imbrication à la fin correspondante.
La largeur combinée des lignes de contour donne une impression visuelle du niveau d'imbrication, en plus de la carte thermique.
La largeur de NestView peut être redimensionnable manuellement, mais ne doit pas changer lorsque le code change. Les lignes de contour peuvent être compressées ou tronquées pour continuer à fonctionner.
Des lignes vierges sont parfois utilisées dans le code pour diviser le texte en morceaux plus faciles à digérer. De telles lignes pourraient déclencher un comportement spécial dans NestView. Par exemple, la carte thermique peut être réinitialisée ou une ligne de contour de couleur d'arrière-plan utilisée, ou les deux.
Une ou plusieurs lignes de contour associées au code actuellement sélectionné peuvent être mises en surbrillance. La ligne de contour associée au niveau de code sélectionné serait la plus accentuée, mais d’autres lignes de contour pourraient également «s’éclairer» en plus d’aider à mettre en évidence le groupe imbriqué contenant.
Différents comportements (tels que le pliage de code ou la sélection de code) peuvent être associés à un clic / un double-clic sur une ligne de contour.
Différentes parties d'une ligne de contour (bord d'attaque, milieu ou arrière) peuvent être associées à différents comportements dynamiques.
Des info-bulles peuvent être affichées sur un événement de survol de la souris sur une ligne de contour
NestView est mis à jour continuellement au fur et à mesure que le code est édité. Lorsque l'imbrication n'est pas bien équilibrée, des hypothèses peuvent être établies là où le niveau d'imbrication doit se terminer, mais les lignes de contour temporaires associées doivent être mises en évidence de manière à constituer un avertissement.
Les comportements de glisser-déposer des lignes de contour peuvent être pris en charge. Le comportement peut varier en fonction de la partie de la ligne de contour déplacée.
Les fonctionnalités couramment trouvées dans la marge de gauche, telles que la numérotation des lignes et la mise en surbrillance des couleurs pour les erreurs et le changement d'état, peuvent recouvrir NestView.
Fonctionnalité supplémentaire
La proposition aborde une série de questions supplémentaires - beaucoup n'entrent pas dans le cadre de la question initiale, mais constituent un effet secondaire utile.
Liaison visuelle du début et de la fin d'une région imbriquée
Les courbes de niveau relient le début et la fin de chaque niveau imbriqué
Mettre en évidence le contexte de la ligne actuellement sélectionnée
Lorsque le code est sélectionné, le niveau de nid associé dans NestView peut être mis en évidence.
Différenciation entre les régions de code au même niveau d'imbrication
Dans le cas de XML, différentes nuances peuvent être utilisées pour différents espaces de noms. Les langages de programmation (tels que c #) prennent en charge des régions nommées pouvant être utilisées de la même manière.
Division des zones d'une zone de nidification en différents blocs visuels
Des lignes supplémentaires sont souvent insérées dans le code pour améliorer la lisibilité. Ces lignes vides peuvent être utilisées pour réinitialiser le niveau de saturation des lignes de contour de NestView.
Affichage de code multi-colonne
Le code sans indentation rend l'utilisation d'une vue multi-colonnes plus efficace car le retour à la ligne automatique ou le défilement horizontal sont moins susceptibles d'être requis. Dans cette vue, une fois que le code a atteint le bas d'une colonne, il passe à la suivante:
Utilisation au-delà d'une simple aide visuelle
Comme proposé dans la vue d'ensemble, NestView pourrait fournir une gamme de fonctions d'édition et de sélection qui correspondraient dans l'ensemble aux attentes d'un contrôle TreeView. La principale différence est qu'un nœud TreeView typique comprend 2 parties: un expandeur et l'icône du nœud. Une ligne de contour NestView peut comporter jusqu'à 3 parties: un ouvre-porte (en pente), un connecteur (vertical) et une fermeture (en pente).
Sur l'indentation
NestView présenté aux côtés de compléments de code non indentés, mais ne remplacera probablement pas la vue de code traditionnelle indentée.
Il est probable que toute solution adoptant NestView fournira une méthode permettant de basculer de manière transparente entre les vues de code indentées et non indentées sans affecter le texte de code lui-même, y compris les caractères d'espacement. Une technique pour la vue indentée est la "mise en forme virtuelle", où une marge gauche dynamique est utilisée à la place de caractères de tabulation ou d'espacement. Les mêmes données de niveau d'imbrication utilisées pour rendre dynamiquement le NestView pourraient également être utilisées pour la vue en retrait plus conventionnelle.
Impression
L'indentation sera importante pour la lisibilité du code imprimé. Ici, l'absence de caractères de tabulation / espace et d'une marge dynamique à gauche signifie que le texte peut être renvoyé à la ligne droite tout en maintenant l'intégrité de la vue en retrait. Les numéros de ligne peuvent être utilisés comme marqueurs visuels pour indiquer où le code est enveloppé par un mot et aussi la position exacte de l'indentation:
Screen Real-Estate: Vs plat en retrait
Aborder la question de savoir si le NestView utilise des informations de valeur sur un écran:
Les lignes de contour fonctionnent bien avec une largeur identique à la largeur de caractère de l'éditeur de code. Une largeur NestView de 12 caractères peut donc accueillir 12 niveaux d'imbrication avant que les lignes de contour ne soient tronquées / compressées.
Si une vue en retrait utilise 3 largeurs de caractères pour chaque niveau d'imbrication, l'espace est sauvegardé jusqu'à ce que l'imbrication atteigne 4 niveaux d'imbrication. Après ce niveau d'imbrication, la vue à plat présente un avantage d'économie d'espace qui augmente avec chaque niveau d'imbrication.
Remarque: Une indentation minimale de 4 caractères est souvent recommandée pour le code, mais XML gère souvent avec moins. De plus, le formatage virtuel permet d’utiliser moins d’indentation car il n’ya aucun risque de problèmes d’alignement.
Une comparaison des 2 vues est présentée ci-dessous:
Sur la base de ce qui précède, il est probablement juste de conclure que le choix du style d'affichage reposera sur des facteurs autres que l'immobilier. La seule exception concerne les cas où l'espace d'écran est limité, par exemple sur un Netbook / une tablette ou lorsque plusieurs fenêtres de code sont ouvertes. Dans ces cas, le NestView redimensionnable semblerait être un gagnant clair.
Cas d'utilisation
Exemples d’exemples concrets dans lesquels NestView peut être une option utile:
Où écran immobilier est à une prime
une. Sur des appareils tels que des tablettes, des blocs-notes et des smartphones
b. Lors de l'affichage du code sur des sites Web
c. Lorsque plusieurs fenêtres de code doivent être visibles simultanément sur le bureau
Lorsque l'indentation cohérente d'un texte dans le code est une priorité
Pour revoir le code profondément imbriqué. Par exemple, les sous-langages (par exemple, Linq en C # ou XPath en XSLT) peuvent entraîner des niveaux élevés d’imbrication.
Accessibilité
Des options de redimensionnement et de couleur doivent être fournies pour aider les malvoyants mais également pour s'adapter aux conditions environnementales et aux préférences personnelles:
Compatibilité du code édité avec d'autres systèmes
Une solution intégrant une option NestView devrait idéalement être capable de supprimer les caractères de tabulation et d'espacement (identifiés comme ayant uniquement un rôle de formatage) du code importé. Ensuite, une fois dépouillé, le code pourrait être parfaitement restitué sans modification dans les vues justifiée à gauche et en retrait. Pour de nombreux utilisateurs qui utilisent des systèmes tels que la fusion et les outils de diff qui ne sont pas sensibles aux espaces, cela sera une préoccupation majeure (si ce n’est un obstacle complet).
Autres travaux:
Visualisation du balisage se chevauchant
La recherche publiée par Wendell Piez , datant de 2004, aborde le problème de la visualisation de balises superposées, en particulier de LMNL . Cela inclut les graphiques SVG présentant des similitudes importantes avec la proposition NestView. Ils sont donc reconnus ici.
Les différences visuelles sont claires dans les images (ci-dessous). La principale différence fonctionnelle est que NestView est destiné uniquement au code XML ou au code bien imbriqué, tandis que les graphiques de Wendell Piez sont conçus pour représenter une imbrication superposée.
Les graphiques ci-dessus ont été reproduits - avec l'aimable autorisation - de http://www.piez.org
Sources: