He escrito un editor de texto XML que proporciona 2 opciones de visualización para el mismo texto XML, uno con sangría (virtualmente) y el otro justificado a la izquierda. La motivación para la vista justificada a la izquierda es ayudar a los usuarios a 'ver' los caracteres de espacios en blanco que están utilizando para sangrar el texto sin formato o el código XPath sin interferencia de la sangría, que es un efecto secundario automatizado del contexto XML.
Quiero proporcionar pistas visuales (en la parte no editable del editor) para el modo justificado a la izquierda que ayudará al usuario, pero sin ser demasiado elaborado.
Intenté simplemente usar líneas de conexión, pero eso parecía demasiado ocupado. Lo mejor que he encontrado hasta ahora se muestra en una captura de pantalla simulada del editor a continuación, pero estoy buscando alternativas mejores / más simples (que no requieren demasiado código).
[Editar]
Tomando la idea del mapa de calor (de: @jimp) obtengo esto y 3 alternativas, etiquetadas como a, byc:
La siguiente sección describe la respuesta aceptada como una propuesta, reuniendo ideas de una serie de otras respuestas y comentarios. Como esta pregunta ahora es wiki comunitaria, no dude en actualizarla.
NestView
El nombre de esta idea que proporciona un método visual para mejorar la legibilidad del código anidado sin usar sangría.
Lineas de contorno
El nombre de las líneas sombreadas de forma diferente dentro de NestView
La imagen de arriba muestra el NestView utilizado para ayudar a visualizar un fragmento XML. Aunque se usa XML para esta ilustración, cualquier otra sintaxis de código que use anidamiento podría haberse usado para esta ilustración.
Una descripción general:
Las líneas de contorno están sombreadas (como en un mapa de calor) para transmitir el nivel de anidación
Las líneas de contorno están en ángulo para mostrar cuándo se abre o se cierra un nivel de anidamiento.
Una línea de contorno vincula el inicio de un nivel de anidación al final correspondiente.
El ancho combinado de las líneas de contorno da una impresión visual del nivel de anidación, además del mapa de calor.
El ancho de NestView puede ser redimensionable manualmente, pero no debe cambiar a medida que cambia el código. Las líneas de contorno se pueden comprimir o truncar para mantener esto.
Las líneas en blanco a veces se usan para dividir el texto en fragmentos más digeribles. Dichas líneas podrían desencadenar un comportamiento especial en NestView. Por ejemplo, el mapa de calor podría restablecerse o utilizarse una línea de contorno de color de fondo, o ambos.
Se pueden resaltar una o más líneas de contorno asociadas con el código seleccionado actualmente. La línea de contorno asociada con el nivel de código seleccionado se enfatizaría más, pero otras líneas de contorno también podrían 'iluminarse' además de ayudar a resaltar el grupo anidado que lo contiene
Se pueden asociar diferentes comportamientos (como plegado de código o selección de código) al hacer clic / doble clic en una línea de contorno.
Las diferentes partes de una línea de contorno (borde inicial, medio o posterior) pueden tener diferentes comportamientos dinámicos asociados.
La información sobre herramientas se puede mostrar en un evento de desplazamiento del mouse sobre una línea de contorno
NestView se actualiza continuamente a medida que se edita el código. Cuando el anidamiento no está bien equilibrado, se pueden hacer suposiciones donde el nivel de anidación debe terminar, pero las líneas de contorno temporales asociadas deben resaltarse de alguna manera como advertencia.
Se pueden admitir los comportamientos de arrastrar y soltar de las líneas de contorno. El comportamiento puede variar según la parte de la línea de contorno que se arrastre.
Las características que se encuentran comúnmente en el margen izquierdo, como la numeración de líneas y el resaltado de color para errores y cambio de estado, podrían superponer NestView.
Funcionalidad adicional
La propuesta aborda una serie de cuestiones adicionales: muchas están fuera del alcance de la pregunta original, pero son un efecto secundario útil.
Vincular visualmente el inicio y el final de una región anidada
Las líneas de contorno conectan el inicio y el final de cada nivel anidado.
Destacando el contexto de la línea seleccionada actualmente
A medida que se selecciona el código, se puede resaltar el nivel de nido asociado en NestView
Diferenciar entre regiones de código en el mismo nivel de anidamiento
En el caso de XML, se pueden usar diferentes tonos para diferentes espacios de nombres. Los lenguajes de programación (como c #) admiten regiones con nombre que podrían usarse de manera similar.
División de áreas dentro de un área de anidación en diferentes bloques visuales
Las líneas adicionales a menudo se insertan en el código para facilitar la legibilidad. Tales líneas vacías podrían usarse para restablecer el nivel de saturación de las líneas de contorno de NestView.
Vista de código de varias columnas
El código sin sangría hace que el uso de una vista de varias columnas sea más eficaz porque es menos probable que se requiera el ajuste horizontal o el desplazamiento horizontal. En esta vista, una vez que el código ha llegado al final de una columna, fluye a la siguiente:
Uso más allá de simplemente proporcionar una ayuda visual
Como se propone en la descripción general, NestView podría proporcionar una gama de características de edición y selección que estarían en línea con lo que se espera de un control TreeView. La diferencia clave es que un nodo TreeView típico tiene 2 partes: un expansor y el ícono del nodo. Una línea de contorno NestView puede tener hasta 3 partes: un abridor (inclinado), un conector (vertical) y un cierre (inclinado).
En sangría
NestView se presenta junto con complementos de código sin sangría, pero es poco probable que reemplace la vista de código con sangría convencional.
Es probable que cualquier solución que adopte un NestView proporcione un método para cambiar sin problemas entre vistas de código con sangría y sin sangría sin afectar el texto del código, incluidos los espacios en blanco. Una técnica para la vista con sangría sería 'Formato virtual', donde se utiliza un margen izquierdo dinámico en lugar de caracteres de tabulación o espacio. Los mismos datos de nivel de anidamiento utilizados para renderizar dinámicamente el NestView también podrían usarse para la vista con sangría de aspecto más convencional.
Impresión
La sangría será importante para la legibilidad del código impreso. Aquí, la ausencia de caracteres de tabulación / espacio y un margen izquierdo dinámico significa que el texto puede ajustarse en el margen derecho y aún así mantener la integridad de la vista con sangría. Los números de línea se pueden usar como marcadores visuales que indican dónde se envuelve el código y también la posición exacta de la sangría:
Screen Real-Estate: Flat Vs Sangría
Abordar la pregunta de si NestView usa bienes inmuebles de pantalla valiosos:
Las líneas de contorno funcionan bien con un ancho igual al ancho de caracteres del editor de código. Por lo tanto, un ancho de NestView de 12 anchos de caracteres puede acomodar 12 niveles de anidamiento antes de que las líneas de contorno sean truncadas / comprimidas.
Si una vista con sangría usa 3 anchos de caracteres para cada nivel de anidación, entonces el espacio se guarda hasta que la anidación alcance 4 niveles de anidación, después de este nivel de anidación, la vista plana tiene una ventaja de ahorro de espacio que aumenta con cada nivel de anidación.
Nota: A menudo se recomienda una sangría mínima de 4 anchos de caracteres para el código, sin embargo, XML a menudo se gestiona con menos. Además, el formato virtual permite que se use menos sangría porque no hay riesgo de problemas de alineación
A continuación se muestra una comparación de las 2 vistas:
Con base en lo anterior, es probable que sea justo concluir que la elección del estilo de vista se basará en otros factores además del espacio real de la pantalla. La única excepción es cuando el espacio de la pantalla es escaso, por ejemplo, en una Netbook / Tablet o cuando se abren múltiples ventanas de código. En estos casos, el NestView redimensionable parecería ser un claro ganador.
Casos de uso
Ejemplos de ejemplos del mundo real donde NestView puede ser una opción útil:
Donde la propiedad inmobiliaria de pantalla es muy importante
a. En dispositivos como tabletas, blocs de notas y teléfonos inteligentes
si. Al mostrar código en sitios web
C. Cuando múltiples ventanas de código necesitan estar visibles en el escritorio simultáneamente
Donde la sangría consistente de espacios en blanco del texto dentro del código es una prioridad
Para revisar código profundamente anidado. Por ejemplo, donde los idiomas secundarios (por ejemplo, Linq en C # o XPath en XSLT) pueden causar altos niveles de anidamiento.
Accesibilidad
Se deben proporcionar opciones de cambio de tamaño y color para ayudar a las personas con discapacidad visual y también para adaptarse a las condiciones ambientales y las preferencias personales:
Compatibilidad del código editado con otros sistemas.
Idealmente, una solución que incorpore una opción NestView debería ser capaz de eliminar los caracteres de tabulación y espacio iniciales (identificados como que solo tienen una función de formateo) del código importado. Luego, una vez despojado, el código podría representarse perfectamente en las vistas con sangría y justificadas a la izquierda sin cambios. Para muchos usuarios que confían en sistemas como herramientas de fusión y diferencia que no son conscientes de los espacios en blanco, esto será una gran preocupación (si no un completo show-stopper).
Otros trabajos:
Visualización de marcado superpuesto
La investigación publicada por Wendell Piez , fechada en 2004, aborda el tema de la visualización de marcas superpuestas, específicamente LMNL . Esto incluye gráficos SVG con similitudes significativas con la propuesta NestView, como tal, se reconocen aquí.
Las diferencias visuales son claras en las imágenes (a continuación), la distinción funcional clave es que NestView está diseñado solo para XML o código bien anidados, mientras que los gráficos de Wendell Piez están diseñados para representar anidamiento superpuesto.
Los gráficos anteriores se reprodujeron, con el amable permiso, de http://www.piez.org
Fuentes: