Napisałem edytor tekstowy XML, który oferuje 2 opcje widoku dla tego samego tekstu XML, jeden wcięty (praktycznie), drugi wyrównany do lewej. Motywacja dla widoku z wyrównaniem do lewej strony ma pomóc użytkownikom „zobaczyć” znaki białych znaków, których używają do wcięcia tekstu jawnego lub kodu XPath bez ingerencji w wcięcie, które jest automatycznym efektem ubocznym kontekstu XML.
Chcę podać wskazówki wizualne (w nieedytowalnej części edytora) dla trybu wyrównanego do lewej, który pomoże użytkownikowi, ale nie będzie zbyt skomplikowany.
Próbowałem po prostu użyć linii łączących, ale wydawało mi się to zbyt zajęte. Najlepsze, jakie do tej pory wymyśliłem, jest pokazane na fałszywym zrzucie ekranu edytora poniżej, ale szukam lepszych / prostszych alternatyw (które nie wymagają zbyt dużego kodu).
[Edytować]
Biorąc pomysł Heatmap (z: @jimp) otrzymuję to i 3 alternatywy - oznaczone jako a, b i c:
W poniższej sekcji opisano zaakceptowaną odpowiedź jako propozycję, łącząc pomysły z wielu innych odpowiedzi i komentarzy. Ponieważ to pytanie jest teraz wiki społeczności, prosimy o aktualizację.
NestView
Nazwa tego pomysłu, który zapewnia wizualną metodę poprawy czytelności zagnieżdżonego kodu bez użycia wcięć.
Linie konturowe
Nazwa różnie zacienionych linii w NestView
Powyższy obraz pokazuje NestView używany do wizualizacji fragmentu kodu XML. Chociaż do tej ilustracji użyto XML, w tej ilustracji można by zastosować inną składnię kodu, która wykorzystuje zagnieżdżanie.
Przegląd:
Linie konturu są zacienione (jak w mapie termicznej), aby przenieść poziom zagnieżdżenia
Linie konturu są ustawione pod kątem, aby pokazać, kiedy poziom zagnieżdżenia jest otwierany lub zamykany.
Linia konturu łączy początek poziomu zagnieżdżenia z odpowiednim końcem.
Połączona szerokość linii konturu daje wizualne wrażenie poziomu zagnieżdżenia, oprócz mapy cieplnej.
Szerokość NestView może być ręcznie zmieniana, ale nie powinna się zmieniać wraz ze zmianą kodu. Linie konturu można kompresować lub obcinać, aby zachować ten efekt.
Puste wiersze są czasem używane w kodzie do dzielenia tekstu na bardziej przyswajalne fragmenty. Takie linie mogą wyzwalać specjalne zachowanie w NestView. Na przykład mapa termiczna może zostać zresetowana, może zostać użyta linia konturu koloru tła lub jedno i drugie.
Można zaznaczyć jedną lub więcej linii konturu związanych z aktualnie wybranym kodem. Linia konturowa powiązana z wybranym poziomem kodu zostałaby najbardziej podkreślona, ale inne linie konturowe mogłyby również „świecić” dodatkowo, aby pomóc podświetlić zawierającą zagnieżdżoną grupę
Różne zachowania (takie jak zwijanie kodu lub wybór kodu) mogą być powiązane z klikaniem / podwójnym klikaniem linii konturu.
Różne części linii konturu (krawędź wiodąca, środkowa lub końcowa) mogą mieć różne zachowania dynamiczne.
Podpowiedzi mogą być pokazywane podczas najechania kursorem myszy na linię konturu
NestView jest aktualizowany w sposób ciągły podczas edycji kodu. Tam, gdzie zagnieżdżanie nie jest dobrze wyważone, można przyjąć założenia, gdzie powinien się kończyć poziom zagnieżdżenia, ale powiązane tymczasowe linie konturu muszą być w jakiś sposób podświetlone jako ostrzeżenie.
Zachowanie przeciągania i upuszczania linii konturowych może być obsługiwane. Zachowanie może się różnić w zależności od części przeciąganej linii konturu.
Funkcje powszechnie spotykane na lewym marginesie, takie jak numeracja linii i wyróżnianie kolorów pod kątem błędów i stanu zmiany, mogą nakładać się na NestView.
Dodatkowa funkcjonalność
Wniosek dotyczy szeregu dodatkowych kwestii - wiele z nich nie wchodzi w zakres pierwotnego pytania, ale jest użytecznym efektem ubocznym.
Łączenie wizualne początku i końca zagnieżdżonego regionu
Linie konturowe łączą początek i koniec każdego zagnieżdżonego poziomu
Podświetlanie kontekstu aktualnie wybranej linii
Po wybraniu kodu można podświetlić powiązany poziom gniazda w NestView
Rozróżnianie regionów kodu na tym samym poziomie zagnieżdżenia
W przypadku XML można zastosować różne odcienie dla różnych przestrzeni nazw. Języki programowania (takie jak c #) obsługują nazwane regiony, których można użyć w podobny sposób.
Dzielenie obszarów w obszarze zagnieżdżenia na różne bloki wizualne
Dodatkowe wiersze są często wstawiane do kodu, aby poprawić czytelność. Takich pustych linii można użyć do zresetowania poziomu nasycenia linii konturowych NestView.
Widok kodu wielokolumnowego
Kod bez wcięcia sprawia, że użycie widoku wielokolumnowego jest bardziej skuteczne, ponieważ zawijanie słów lub przewijanie w poziomie jest mniej prawdopodobne. W tym widoku, gdy kod osiągnie dolną część jednej kolumny, przechodzi do następnej:
Wykorzystanie wykraczające poza zwykłą pomoc wizualną
Jak zaproponowano w przeglądzie, NestView może zapewnić szereg funkcji edycji i wyboru, które byłyby zasadniczo zgodne z oczekiwaniami względem kontrolki TreeView. Kluczową różnicą jest to, że typowy węzeł TreeView ma 2 części: ekspander i ikonę węzła. Linia konturowa NestView może składać się z 3 części: otwieracza (nachylenie), łącznika (pion) i zamknięcia (nachylenie).
Wgłębienie
NestView prezentowany wraz z kodem bez wcięcia uzupełnia, ale raczej nie zastąpi konwencjonalnego widoku kodu z wcięciem.
Jest prawdopodobne, że wszelkie rozwiązania przyjmujące NestView zapewnią metodę płynnego przełączania między widokami kodu z wcięciem i bez wcięcia bez wpływu na sam tekst kodu - w tym na białe znaki. Jedną z technik dla wcięcia jest „Formatowanie wirtualne” - gdzie zamiast znaków tabulacji lub spacji stosuje się dynamiczny lewy margines. Te same dane na poziomie zagnieżdżenia użyte do dynamicznego renderowania NestView mogą być również wykorzystane do bardziej konwencjonalnego widoku wcięcia.
Druk
Wcięcie będzie ważne dla czytelności drukowanego kodu. W tym przypadku brak znaków tabulacji / spacji i dynamicznego lewego marginesu oznacza, że tekst może się zawijać na prawym marginesie i nadal zachowywać integralność wcięcia. Numery linii mogą być używane jako wizualne znaczniki wskazujące miejsce, w którym kod jest zawijany, a także dokładne położenie wcięcia:
Nieruchomość ekranowa: wcięcie Flat Vs
Odpowiedź na pytanie, czy NestView wykorzystuje cenne nieruchomości ekranowe:
Linie konturu działają dobrze z szerokością taką samą, jak szerokość znaków edytora kodu. Dlatego NestView o szerokości 12 znaków może pomieścić 12 poziomów zagnieżdżenia, zanim linie konturu zostaną obcięte / skompresowane.
Jeśli wcięty widok używa 3 szerokości znaków dla każdego poziomu zagnieżdżenia, wówczas przestrzeń jest oszczędzana, aż zagnieżdżenie osiągnie 4 poziomy zagnieżdżenia, po tym poziomie zagnieżdżenia płaski widok ma zaletę oszczędzania miejsca, która wzrasta z każdym poziomem zagnieżdżenia.
Uwaga: W przypadku kodu często zalecane jest minimalne wcięcie o szerokości 4 znaków, jednak XML często radzi sobie z mniejszą liczbą znaków. Ponadto formatowanie wirtualne pozwala na stosowanie mniej wcięć, ponieważ nie ma ryzyka problemów z wyrównaniem
Porównanie 2 widoków pokazano poniżej:
W związku z powyższym należy prawdopodobnie stwierdzić, że wybór stylu widoku będzie oparty na czynnikach innych niż nieruchomości ekranowe. Jedynym wyjątkiem jest sytuacja, w której przestrzeń ekranu jest na wagę złota, na przykład na netbooku / tablecie lub gdy otwartych jest wiele okien kodu. W takich przypadkach NestView, którego rozmiar można zmienić, wydaje się wyraźnym zwycięzcą.
Przypadków użycia
Przykłady rzeczywistych przykładów, w których NestView może być przydatną opcją:
Gdzie nieruchomości ekranowe są na wagę złota
za. Na urządzeniach takich jak tablety, notatniki i smartfony
b. Podczas wyświetlania kodu na stronach internetowych
do. Gdy wiele okien kodu musi być jednocześnie widocznych na pulpicie
Tam, gdzie spójne wcięcie białych znaków w kodzie jest priorytetem
Do przeglądania głęboko zagnieżdżonego kodu. Na przykład, gdy podjęzyki (np. Linq w C # lub XPath w XSLT) mogą powodować wysokie poziomy zagnieżdżania.
Dostępność
Należy zapewnić opcje zmiany rozmiaru i koloru, aby pomóc osobom z wadami wzroku, a także by dostosować się do warunków otoczenia i osobistych preferencji:
Kompatybilność edytowanego kodu z innymi systemami
Rozwiązanie zawierające opcję NestView powinno idealnie być w stanie usunąć wiodące znaki tabulacji i spacji (zidentyfikowane jako mające tylko rolę formatującą) z importowanego kodu. Następnie, po usunięciu kodu, można go bez problemu renderować zarówno w widokach wyrównanych do lewej, jak i wcięciach. Dla wielu użytkowników polegających na systemach takich jak narzędzia do łączenia i porównywania, które nie są świadome białych znaków, będzie to poważny problem (jeśli nie kompletny program zatrzymujący wyświetlanie).
Inne prace:
Wizualizacja nakładających się znaczników
Opublikowane badania Wendella Pieza , datowane na rok 2004, dotyczą problemu wizualizacji nakładających się znaczników, w szczególności LMNL . Obejmuje to grafikę SVG o znacznych podobieństwach do propozycji NestView, dlatego są one tutaj potwierdzane.
Różnice wizualne są wyraźne na obrazach (poniżej), kluczowe rozróżnienie funkcjonalne polega na tym, że NestView jest przeznaczony tylko dla dobrze zagnieżdżonego XML lub kodu, podczas gdy grafika Wendell Piez jest zaprojektowana tak, aby reprezentować nakładające się zagnieżdżenie.
Powyższe grafiki zostały odtworzone - za uprzejmym pozwoleniem - z http://www.piez.org
Źródła: