Eu escrevi um editor de texto XML que fornece duas opções de exibição para o mesmo texto XML, um recuado (virtualmente) e o outro justificado à esquerda. A motivação para a visualização justificada à esquerda é ajudar os usuários a 'ver' os caracteres de espaço em branco que estão usando para indentação de texto sem formatação ou código XPath sem interferência da indentação que é um efeito colateral automatizado do contexto XML.
Desejo fornecer pistas visuais (na parte não editável do editor) para o modo justificado à esquerda que ajudará o usuário, mas sem ser muito elaborado.
Tentei apenas usar linhas de conexão, mas isso parecia muito ocupado. O melhor que eu vim até agora é mostrado em uma captura de tela zombada do editor abaixo, mas estou procurando alternativas melhores / mais simples (que não exigem muito código).
[Editar]
Tomando a ideia do mapa de calor (de: @jimp), recebo esta e três alternativas - rotuladas como a, bec:
A seção a seguir descreve a resposta aceita como uma proposta, reunindo idéias de várias outras respostas e comentários. Como esta pergunta agora é wiki da comunidade, fique à vontade para atualizá-la.
NestView
O nome dessa idéia, que fornece um método visual para melhorar a legibilidade do código aninhado sem usar recuo.
Linhas de contorno
O nome das linhas sombreadas de maneira diferente no NestView
A imagem acima mostra o NestView usado para ajudar a visualizar um snippet XML. Embora XML seja usado para esta ilustração, qualquer outra sintaxe de código que use aninhamento poderia ter sido usada para esta ilustração.
Uma visão geral:
As linhas de contorno são sombreadas (como em um mapa de calor) para transmitir o nível de aninhamento
As linhas de contorno são anguladas para mostrar quando um nível de aninhamento está sendo aberto ou fechado.
Uma linha de contorno vincula o início de um nível de aninhamento ao final correspondente.
A largura combinada das linhas de contorno fornece uma impressão visual do nível de aninhamento, além do mapa de calor.
A largura do NestView pode ser redimensionada manualmente, mas não deve mudar à medida que o código é alterado. As linhas de contorno podem ser compactadas ou truncadas para manter isso.
Às vezes, linhas em branco são usadas para dividir o texto em pedaços mais digeríveis. Essas linhas podem desencadear um comportamento especial no NestView. Por exemplo, o mapa de calor pode ser redefinido ou uma linha de contorno de cor de fundo usada, ou ambas.
Uma ou mais linhas de contorno associadas ao código atualmente selecionado podem ser destacadas. A linha de contorno associada ao nível de código selecionado seria mais enfatizada, mas outras linhas de contorno também poderiam "acender", além de ajudar a destacar o grupo aninhado
Comportamentos diferentes (como dobra de código ou seleção de código) podem ser associados ao clicar / clicar duas vezes em uma linha de contorno.
Diferentes partes de uma linha de contorno (aresta inicial, média ou final) podem ter diferentes comportamentos dinâmicos associados.
As dicas de ferramentas podem ser mostradas em um evento de foco do mouse sobre uma linha de contorno
O NestView é atualizado continuamente à medida que o código é editado. Onde o aninhamento não é bem equilibrado, é possível fazer suposições onde o nível de aninhamento deve terminar, mas as linhas de contorno temporárias associadas devem ser destacadas de alguma forma como um aviso.
Os comportamentos de arrastar e soltar das linhas de contorno podem ser suportados. O comportamento pode variar de acordo com a parte da linha de contorno que está sendo arrastada.
Recursos comumente encontrados na margem esquerda, como numeração de linhas e destaque de cores para erros e alteração de estado, podem sobrepor o NestView.
Funcionalidade Adicional
A proposta aborda uma série de questões adicionais - muitas estão fora do escopo da pergunta original, mas um efeito colateral útil.
Vincular visualmente o início e o fim de uma região aninhada
As linhas de contorno conectam o início e o fim de cada nível aninhado
Destacando o contexto da linha atualmente selecionada
À medida que o código é selecionado, o nível de ninho associado no NestView pode ser destacado
Diferenciando entre regiões de código no mesmo nível de aninhamento
No caso do XML, diferentes matizes podem ser usados para diferentes namespaces. Linguagens de programação (como c #) oferecem suporte a regiões nomeadas que podem ser usadas de maneira semelhante.
Dividindo áreas dentro de uma área de nidificação em diferentes blocos visuais
Linhas extras são frequentemente inseridas no código para facilitar a legibilidade. Essas linhas vazias podem ser usadas para redefinir o nível de saturação das linhas de contorno do NestView.
Visualização de código de várias colunas
Código sem recuo torna o uso de uma exibição de várias colunas mais eficaz, pois é menos provável que seja necessária a quebra de linha ou a rolagem horizontal. Nesta visão, quando o código atinge a parte inferior de uma coluna, ele flui para a próxima:
Uso além de apenas fornecer uma ajuda visual
Conforme proposto na visão geral, o NestView poderia fornecer uma variedade de recursos de edição e seleção que estariam amplamente alinhados com o que é esperado de um controle TreeView. A principal diferença é que um nó TreeView típico possui 2 partes: um expansor e o ícone do nó. Uma linha de contorno NestView pode ter até três partes: um abridor (inclinado), um conector (vertical) e um fechamento (inclinado).
No recuo
O NestView é apresentado juntamente com complementos de código não recuado, mas é improvável que substitua a exibição de código recuado convencional.
É provável que qualquer solução que adote um NestView forneça um método para alternar perfeitamente entre exibições de código recuadas e não recuadas sem afetar nenhum texto do código em si - incluindo caracteres de espaço em branco. Uma técnica para a exibição recuada seria 'Formatação virtual' - onde uma margem esquerda dinâmica é usada no lugar de caracteres de tabulação ou espaço. Os mesmos dados no nível de aninhamento usados para renderizar dinamicamente o NestView também podem ser usados para a exibição recuada de aparência mais convencional.
Impressão
O recuo será importante para a legibilidade do código impresso. Aqui, a ausência de caracteres de tabulação / espaço e uma margem esquerda dinâmica significa que o texto pode quebrar na margem direita e ainda manter a integridade da exibição recuada. Os números de linha podem ser usados como marcadores visuais que indicam onde o código está quebrado por palavras e também a posição exata do recuo:
Imobiliário de tela: plano versus recuado
Abordando a questão de saber se o NestView usa valiosos imóveis da tela:
As linhas de contorno funcionam bem com uma largura igual à largura dos caracteres do editor de código. Uma largura do NestView de 12 caracteres pode, portanto, acomodar 12 níveis de aninhamento antes que as linhas de contorno sejam truncadas / compactadas.
Se uma vista recuada usar 3 larguras de caracteres para cada nível de aninhamento, o espaço será economizado até o aninhamento atingir 4 níveis de aninhamento. Após esse nível, a vista plana terá uma vantagem de economia de espaço que aumenta a cada nível de aninhamento.
Nota: Um recuo mínimo de 4 larguras de caracteres é frequentemente recomendado para código, no entanto, o XML geralmente gerencia com menos. Além disso, a Formatação virtual permite que menos recuo seja usado porque não há risco de problemas de alinhamento
Uma comparação das 2 visualizações é mostrada abaixo:
Com base no exposto, provavelmente é justo concluir que a escolha do estilo de exibição será baseada em outros fatores que não sejam os imóveis na tela. A única exceção é onde o espaço na tela é limitado, por exemplo, em um Netbook / Tablet ou quando várias janelas de código são abertas. Nesses casos, o NestView redimensionável parece ser um vencedor claro.
Casos de Uso
Exemplos de exemplos do mundo real em que o NestView pode ser uma opção útil:
Onde os imóveis da tela são escassos
uma. Em dispositivos como tablets, blocos de notas e smartphones
b. Ao mostrar código em sites
c. Quando várias janelas de código precisam estar visíveis na área de trabalho simultaneamente
Onde a recuo consistente de espaço em branco do texto no código é uma prioridade
Para revisar código profundamente aninhado. Por exemplo, onde sub-idiomas (por exemplo, Linq em C # ou XPath em XSLT) podem causar altos níveis de aninhamento.
Acessibilidade
As opções de redimensionamento e cor devem ser fornecidas para ajudar as pessoas com deficiência visual e também para atender às condições ambientais e preferências pessoais:
Compatibilidade do código editado com outros sistemas
Uma solução que incorpore uma opção NestView deve, idealmente, ser capaz de remover os caracteres de tabulação e espaço iniciais (identificados como tendo apenas uma função de formatação) do código importado. Então, uma vez retirado, o código poderia ser renderizado ordenadamente nas visualizações justificada à esquerda e recuada sem alterações. Para muitos usuários que confiam em sistemas como ferramentas de fusão e de diferenças que não reconhecem o espaço em branco, essa será uma grande preocupação (se não um completo complemento).
Outros trabalhos:
Visualização da marcação sobreposta
A pesquisa publicada por Wendell Piez , datada de 2004, aborda a questão da visualização da marcação sobreposta, especificamente o LMNL . Isso inclui gráficos SVG com semelhanças significativas com a proposta do NestView; portanto, eles são reconhecidos aqui.
As diferenças visuais são claras nas imagens (abaixo), a principal distinção funcional é que o NestView é destinado apenas a XML ou código bem aninhado, enquanto os gráficos de Wendell Piez são projetados para representar aninhamento sobreposto.
Os gráficos acima foram reproduzidos - com a devida permissão - de http://www.piez.org
Fontes: