Я написал текстовый редактор XML, который предоставляет 2 варианта просмотра для одного и того же текста XML, один с отступом (виртуально), другой с выравниванием по левому краю. Мотивация для выравнивания по левому краю состоит в том, чтобы помочь пользователям «увидеть» пробельные символы, которые они используют для отступа в виде простого текста или кода XPath, без вмешательства отступа, который является автоматическим побочным эффектом контекста XML.
Я хочу предоставить визуальные подсказки (в нередактируемой части редактора) для выровненного по левому краю режима, который поможет пользователю, но не слишком усложняется.
Я пытался просто использовать соединительные линии, но это казалось слишком занятым. Лучшее, что я придумала до сих пор, показано на макете скриншота редактора ниже, но я ищу лучшие / более простые альтернативы (которые не требуют слишком много кода).
[Редактировать]
Принимая идею тепловой карты (из: @jimp), я получаю это и 3 варианта - помеченные a, b и c:
Следующий раздел описывает принятый ответ как предложение, объединяя идеи из ряда других ответов и комментариев. Поскольку этот вопрос теперь является вики-сообществом, пожалуйста, обновите его.
NestView
Имя для этой идеи, которая предоставляет визуальный метод для улучшения читаемости вложенного кода без использования отступов.
Контурные линии
Название для разноцветных линий в NestView
На изображении выше показан NestView, используемый для визуализации фрагмента XML. Хотя для этой иллюстрации используется XML, любой другой синтаксис кода, который использует вложение, мог бы использоваться для этой иллюстрации.
Обзор:
Контурные линии затенены (как в тепловой карте), чтобы передать уровень вложенности
Линии контура расположены под углом, чтобы показать, когда уровень вложенности открывается или закрывается.
Контурная линия связывает начало уровня вложенности с соответствующим концом.
Объединенная ширина контурных линий в дополнение к тепловой карте дает визуальное представление об уровне вложенности.
Ширина NestView может быть изменена вручную, но не должна изменяться при изменении кода. Контурные линии могут быть сжаты или усечены, чтобы сохранить это.
Пустые строки иногда используют код, чтобы разбить текст на более усваиваемые куски. Такие строки могут вызывать особое поведение в NestView. Например, тепловая карта может быть сброшена или использована контурная линия цвета фона, или и то, и другое.
Можно выделить одну или несколько линий контура, связанных с текущим выбранным кодом. Контурная линия, связанная с выбранным уровнем кода, будет выделена больше всего, но другие контурные линии также могут «загореться» в дополнение, чтобы помочь выделить вложенную вложенную группу.
Различное поведение (например, свертывание кода или выбор кода) может быть связано с щелчком / двойным щелчком по линии контура.
Различные части линии контура (передний, средний или задний край) могут иметь разные динамические поведения.
Подсказки могут отображаться при наведении курсора мыши на линию контура
NestView постоянно обновляется по мере редактирования кода. Там, где вложение не сбалансировано, могут быть сделаны предположения о том, где должен заканчиваться уровень вложения, но соответствующие временные контурные линии должны быть выделены каким-либо образом в качестве предупреждения.
Перетаскивание поведения линий контура может поддерживаться. Поведение может варьироваться в зависимости от части перетаскиваемой контурной линии.
Функции, обычно встречающиеся в левом поле, такие как нумерация строк и выделение цветом для ошибок и изменения состояния, могут перекрывать NestView.
Дополнительная функциональность
Предложение затрагивает ряд дополнительных вопросов - многие из них выходят за рамки первоначального вопроса, но являются полезным побочным эффектом.
Визуально связывает начало и конец вложенной области
Контурные линии соединяют начало и конец каждого вложенного уровня
Выделение контекста текущей выбранной строки
Когда код выбран, соответствующий уровень гнезда в NestView может быть выделен
Различение областей кода на одном уровне вложенности
В случае XML разные оттенки могут использоваться для разных пространств имен. Языки программирования (такие как c #) поддерживают именованные области, которые можно использовать аналогичным образом.
Разделение областей в пределах области вложенности на разные визуальные блоки
Дополнительные строки часто вставляются в код для удобства чтения. Такие пустые линии можно использовать для сброса уровня насыщенности контурных линий NestView.
Многоколонный просмотр кода
Код без отступов делает использование многостолбцового представления более эффективным, поскольку менее вероятно, что потребуется перенос по словам или горизонтальная прокрутка. В этом представлении, как только код достигнет нижней части одного столбца, он переходит в следующий:
Использование за пределами простого предоставления визуальной помощи
Как предложено в обзоре, NestView может предоставить ряд функций редактирования и выбора, которые будут в целом соответствовать тому, что ожидается от элемента управления TreeView. Основное отличие состоит в том, что типичный узел TreeView состоит из 2 частей: расширителя и значка узла. Контурная линия NestView может состоять из трех частей: открыватель (наклонный), соединитель (вертикальный) и закрывающий (наклонный).
На отступе
NestView, представленный вместе с не отступным кодом, дополняет, но вряд ли заменит традиционное представление с отступом.
Вполне вероятно, что любые решения, использующие NestView, будут обеспечивать метод для плавного переключения между представлениями кода с отступом и без отступа, не затрагивая при этом ни сам текст кода, включая пробельные символы. Одним из методов для представления с отступом будет «Виртуальное форматирование», где вместо символов табуляции или пробела используется динамическое левое поле. Те же данные уровня вложенности, которые используются для динамического рендеринга NestView, могут также использоваться для более традиционного вида отступа.
печать
Отступ будет важен для читабельности напечатанного кода. Здесь отсутствие символов табуляции / пробела и динамического левого поля означает, что текст может переноситься с правого поля и при этом сохранять целостность отступа. Номера строк могут использоваться в качестве визуальных маркеров, которые указывают, где код обернут в слово, а также точное положение отступа:
Экран Недвижимость: квартира против отступа
Решение вопроса о том, использует ли NestView ценную недвижимость на экране:
Контурные линии хорошо работают с шириной, равной ширине символа редактора кода. Поэтому ширина NestView в 12 символов может вместить 12 уровней вложенности до того, как контурные линии будут обрезаны / сжаты.
Если представление с отступом использует 3 ширины символов для каждого уровня вложенности, то пространство сохраняется до тех пор, пока вложенность не достигнет 4 уровней вложенности, после этого уровня вложенности плоский вид имеет преимущество в экономии места, которое увеличивается с каждым уровнем вложенности.
Примечание. Для кода часто рекомендуется минимальный отступ в 4 символа, однако XML часто обходится с меньшими затратами. Кроме того, виртуальное форматирование позволяет использовать меньше отступов, потому что нет риска проблем с выравниванием
Сравнение двух видов показано ниже:
Исходя из вышесказанного, вероятно, справедливо будет сделать вывод, что выбор стиля представления будет зависеть от других факторов, помимо экранной недвижимости. Единственное исключение - это то, где место на экране имеет преимущество, например, на нетбуке / планшете или когда открыто несколько окон кода. В этих случаях NestView с изменяемым размером может показаться очевидным победителем.
Сценарии использования
Примеры реальных примеров, где NestView может быть полезной опцией:
Где экранная недвижимость стоит дороже
а. На таких устройствах, как планшеты, блокноты и смартфоны
б. При отображении кода на веб-сайтах
с. Когда несколько окон кода должны быть видны на рабочем столе одновременно
Там, где согласованный отступ текста в коде является приоритетом
Для просмотра глубоко вложенного кода. Например, когда подъязыки (например, Linq в C # или XPath в XSLT) могут вызывать высокий уровень вложенности.
доступность
Должны быть предусмотрены варианты изменения размера и цвета для помощи людям с нарушениями зрения, а также для соответствия условиям окружающей среды и личным предпочтениям:
Совместимость редактируемого кода с другими системами
Решение, включающее опцию NestView, в идеале должно быть способно удалять начальные символы табуляции и пробела (идентифицированные как имеющие только роль форматирования) из импортированного кода. Затем, после удаления код можно аккуратно отобразить в лево-выровненных и отступах без изменений. Для многих пользователей, использующих системы, такие как инструменты слияния и сравнения, которые не знают пробелов, это будет серьезной проблемой (если не полной демонстрацией пробок).
Другие работы:
Визуализация перекрывающейся разметки
Опубликованное исследование Уэнделла Пиза , датированное 2004 годом, посвящено проблеме визуализации перекрывающейся разметки, в частности LMNL . Это включает SVG-графику со значительным сходством с предложением NestView, поэтому они признаны здесь.
Визуальные различия четко видны на изображениях (ниже), ключевое функциональное различие заключается в том, что NestView предназначен только для хорошо вложенного XML или кода, тогда как графика Уэнделла Пиза предназначена для представления перекрывающихся вложений.
Графики выше были воспроизведены - с любезного разрешения - с http://www.piez.org
Источники: