Ho scritto un editor di testo XML che fornisce 2 opzioni di visualizzazione per lo stesso testo XML, uno rientrato (virtualmente), l'altro giustificato a sinistra. La motivazione per la vista giustificata a sinistra è di aiutare gli utenti a "vedere" i caratteri degli spazi bianchi che stanno usando per il rientro del testo in chiaro o del codice XPath senza interferenze dal rientro che è un effetto collaterale automatizzato del contesto XML.
Voglio fornire indizi visivi (nella parte non modificabile dell'editor) per la modalità giustificata a sinistra che aiuterà l'utente, ma senza essere troppo elaborata.
Ho provato a usare solo le linee di collegamento, ma sembrava troppo affollato. Il meglio che ho trovato finora è mostrato in uno screenshot simulato dell'editor qui sotto, ma sto cercando alternative migliori / più semplici (che non richiedono troppo codice).
[Modificare]
Prendendo l'idea della mappa di calore (da: @jimp) ottengo questa e 3 alternative - etichettate a, bec:
La sezione seguente descrive la risposta accettata come una proposta, riunendo idee da una serie di altre risposte e commenti. Poiché questa domanda è ora wiki della community, non esitare ad aggiornarlo.
NestView
Il nome per questa idea che fornisce un metodo visivo per migliorare la leggibilità del codice nidificato senza utilizzare il rientro.
Linee di contorno
Il nome per le linee diversamente ombreggiate all'interno di NestView
L'immagine sopra mostra NestView utilizzato per aiutare a visualizzare uno snippet XML. Sebbene XML sia utilizzato per questa illustrazione, qualsiasi altra sintassi del codice che utilizza l'annidamento potrebbe essere stata utilizzata per questa illustrazione.
Una panoramica:
Le linee di contorno sono ombreggiate (come in una mappa di calore) per comunicare il livello di annidamento
Le linee di contorno sono inclinate per mostrare quando un livello di annidamento viene aperto o chiuso.
Una linea di contorno collega l'inizio di un livello di annidamento alla fine corrispondente.
La larghezza combinata delle linee di contorno offre un'impressione visiva del livello di annidamento, oltre alla mappa di calore.
La larghezza di NestView può essere ridimensionabile manualmente, ma non dovrebbe cambiare quando cambia il codice. Le linee di contorno possono essere compresse o troncate per mantenere questo risultato.
Le righe vuote vengono talvolta utilizzate come codice per suddividere il testo in blocchi più digeribili. Tali linee potrebbero innescare comportamenti speciali in NestView. Ad esempio, è possibile ripristinare la mappa di calore o utilizzare una linea di contorno del colore di sfondo o entrambi.
È possibile evidenziare una o più linee di contorno associate al codice attualmente selezionato. La linea di contorno associata al livello di codice selezionato verrebbe maggiormente enfatizzata, ma anche altre linee di contorno potrebbero 'illuminarsi' in aggiunta per aiutare a evidenziare il gruppo nidificato contenente
Diversi comportamenti (come la piegatura del codice o la selezione del codice) possono essere associati al clic / doppio clic su una linea di contorno.
Parti diverse di una linea di contorno (bordo anteriore, medio o finale) possono avere comportamenti dinamici diversi associati.
Le descrizioni comandi possono essere visualizzate su un evento al passaggio del mouse su una linea di contorno
NestView viene aggiornato continuamente man mano che il codice viene modificato. Laddove la nidificazione non sia ben bilanciata, è possibile formulare ipotesi in merito alla conclusione del livello di nidificazione, ma le linee di contorno temporanee associate devono essere evidenziate in qualche modo come avvertenza.
È possibile supportare i comportamenti di trascinamento delle linee di contorno. Il comportamento può variare in base alla parte della linea di contorno trascinata.
Funzionalità comunemente presenti nel margine sinistro come la numerazione delle linee e l'evidenziazione del colore per errori e cambiamenti di stato potrebbero sovrapporre NestView.
Funzionalità aggiuntiva
La proposta affronta una serie di questioni aggiuntive: molte sono al di fuori dell'ambito della domanda originale, ma un utile effetto collaterale.
Collega visivamente l'inizio e la fine di una regione nidificata
Le linee di contorno collegano l'inizio e la fine di ciascun livello nidificato
Evidenziando il contesto della linea attualmente selezionata
Quando viene selezionato il codice, è possibile evidenziare il livello del nido associato in NestView
Differenziazione tra regioni di codice allo stesso livello di nidificazione
Nel caso di XML è possibile utilizzare tonalità diverse per spazi dei nomi diversi. I linguaggi di programmazione (come c #) supportano regioni denominate che potrebbero essere utilizzate in modo simile.
Dividere le aree all'interno di un'area di nidificazione in diversi blocchi visivi
Le linee extra vengono spesso inserite nel codice per facilitare la leggibilità. Tali linee vuote potrebbero essere utilizzate per ripristinare il livello di saturazione delle linee di contorno del NestView.
Vista codice multi-colonna
Il codice senza rientro rende più efficace l'uso di una vista a più colonne poiché è meno probabile che siano necessari il ritorno a capo automatico o lo scorrimento orizzontale. In questa vista, una volta che il codice ha raggiunto il fondo di una colonna, scorre nel successivo:
L'uso oltre a fornire semplicemente un aiuto visivo
Come proposto nella panoramica, NestView potrebbe fornire una gamma di funzioni di modifica e selezione che sarebbero sostanzialmente in linea con quanto previsto da un controllo TreeView. La differenza fondamentale è che un tipico nodo TreeView ha 2 parti: un espansore e l'icona del nodo. Una linea di contorno NestView può avere fino a 3 parti: un apri (inclinato), un connettore (verticale) e una chiusura (inclinata).
Sulla rientranza
NestView viene presentato insieme a complementi di codice non indentati, ma è improbabile che sostituisca la vista di codice indentata convenzionale.
È probabile che qualsiasi soluzione che adotti un NestView fornirà un metodo per passare senza interruzioni tra viste di codice indentate e non indentate senza influire sul testo del codice stesso, inclusi i caratteri di spazi bianchi. Una tecnica per la vista rientrata sarebbe la "formattazione virtuale", in cui viene usato un margine sinistro dinamico al posto di caratteri di tabulazione o spazio. Gli stessi dati a livello di annidamento utilizzati per il rendering dinamico di NestView potrebbero anche essere utilizzati per una vista rientrata dall'aspetto più convenzionale.
Stampa
Il rientro sarà importante per la leggibilità del codice stampato. Qui, l'assenza di caratteri tab / space e un margine sinistro dinamico significa che il testo può avvolgere sul margine destro e mantenere comunque l'integrità della vista rientrata. I numeri di riga possono essere utilizzati come marcatori visivi che indicano dove il codice è racchiuso tra le parole e anche la posizione esatta del rientro:
Schermo immobiliare: piatto contro rientro
Rispondere alla domanda se NestView utilizza preziose proprietà dello schermo:
Le linee di contorno funzionano bene con una larghezza uguale alla larghezza del carattere dell'editor di codice. Una larghezza NestView di 12 caratteri può quindi ospitare 12 livelli di annidamento prima che le linee di contorno vengano troncate / compresse.
Se una vista rientrata utilizza 3 larghezze di carattere per ciascun livello di annidamento, lo spazio viene risparmiato fino a quando l'annidamento non raggiunge 4 livelli di annidamento, dopo questo livello di annidamento la vista piatta presenta un vantaggio salvaspazio che aumenta con ogni livello di annidamento.
Nota: un rientro minimo di 4 caratteri di larghezza è spesso raccomandato per il codice, tuttavia XML spesso gestisce con meno. Inoltre, la formattazione virtuale consente di utilizzare meno rientri poiché non sussiste il rischio di problemi di allineamento
Di seguito è mostrato un confronto delle 2 viste:
Sulla base di quanto sopra, è probabilmente corretto concludere che la scelta dello stile di visualizzazione si baserà su fattori diversi dal settore immobiliare dello schermo. L'unica eccezione è quella in cui lo spazio dello schermo è un premio, ad esempio su un netbook / tablet o quando sono aperte più finestre di codice. In questi casi, NestView ridimensionabile sembrerebbe essere un chiaro vincitore.
Casi d'uso
Esempi di esempi reali in cui NestView può essere un'opzione utile:
Dove lo schermo immobiliare è un premio
un. Su dispositivi come tablet, blocchi note e smartphone
b. Quando si mostra il codice sui siti Web
c. Quando più finestre di codice devono essere visibili contemporaneamente sul desktop
Laddove un rientro consistente degli spazi bianchi nel testo all'interno del codice è una priorità
Per la revisione di codice profondamente nidificato. Ad esempio, dove le lingue secondarie (ad esempio Linq in C # o XPath in XSLT) potrebbero causare livelli elevati di annidamento.
Accessibilità
Le opzioni di ridimensionamento e colore devono essere fornite per aiutare le persone con disabilità visive e anche per soddisfare le condizioni ambientali e le preferenze personali:
Compatibilità del codice modificato con altri sistemi
Una soluzione che incorpora un'opzione NestView dovrebbe idealmente essere in grado di eliminare i caratteri di tabulazione e spazio (identificati come aventi solo un ruolo di formattazione) dal codice importato. Quindi, una volta rimosso, il codice potrebbe essere reso in modo ordinato in entrambe le viste giustificate a sinistra e rientrate senza modifiche. Per molti utenti che si affidano a sistemi come la fusione e strumenti diff che non sono consapevoli degli spazi, questa sarà una delle maggiori preoccupazioni (se non uno stop-show completo).
Altre opere:
Visualizzazione del markup sovrapposto
Una ricerca pubblicata da Wendell Piez , datata 2004, affronta il problema della visualizzazione del markup sovrapposto, in particolare LMNL . Ciò include la grafica SVG con significative somiglianze con la proposta NestView, come tale, sono riconosciute qui.
Le differenze visive sono chiare nelle immagini (sotto), la distinzione funzionale chiave è che NestView è inteso solo per XML o codice ben nidificati, mentre la grafica di Wendell Piez è progettata per rappresentare la nidificazione sovrapposta.
La grafica sopra è stata riprodotta - con gentile concessione - da http://www.piez.org
fonti: