Tôi đã viết một trình soạn thảo văn bản XML cung cấp 2 tùy chọn xem cho cùng một văn bản XML, một tùy chỉnh thụt lề (hầu như), còn lại được chứng minh trái. Động lực cho chế độ xem bên trái là giúp người dùng 'nhìn thấy' các ký tự khoảng trắng mà họ đang sử dụng để thụt lề văn bản thuần hoặc mã XPath mà không bị can thiệp từ thụt lề là hiệu ứng phụ tự động của bối cảnh XML.
Tôi muốn cung cấp manh mối trực quan (trong phần không thể chỉnh sửa của trình chỉnh sửa) cho chế độ bên trái sẽ giúp người dùng, nhưng không quá phức tạp.
Tôi đã thử chỉ sử dụng các đường kết nối, nhưng điều đó dường như quá bận rộn. Điều tốt nhất tôi nghĩ ra cho đến nay được thể hiện trong một ảnh chụp màn hình của trình chỉnh sửa bên dưới, nhưng tôi đang tìm kiếm các lựa chọn thay thế tốt hơn / đơn giản hơn (không yêu cầu quá nhiều mã).
[Biên tập]
Lấy ý tưởng bản đồ nhiệt (từ: @jimp) Tôi nhận được điều này và 3 lựa chọn thay thế - được gắn nhãn a, b và c:
Phần sau đây mô tả câu trả lời được chấp nhận là một đề xuất, tập hợp các ý tưởng từ một số câu trả lời và nhận xét khác. Vì câu hỏi này là wiki cộng đồng, xin vui lòng cập nhật nó.
NestView
Tên của ý tưởng này cung cấp một phương thức trực quan để cải thiện khả năng đọc mã lồng nhau mà không cần sử dụng thụt lề.
Đường Đồng mức
Tên cho các dòng được tô bóng khác nhau trong NestView
Hình ảnh trên cho thấy NestView được sử dụng để giúp trực quan hóa một đoạn mã XML. Mặc dù XML được sử dụng cho minh họa này, bất kỳ cú pháp mã nào khác sử dụng lồng nhau có thể đã được sử dụng cho minh họa này.
Một cái nhìn tổng quan:
Các đường đồng mức được tô bóng (như trong bản đồ nhiệt) để chuyển mức lồng nhau
Các đường đồng mức được đặt để hiển thị khi mức lồng nhau được mở hoặc đóng.
Một đường đồng mức liên kết bắt đầu một mức lồng nhau đến cuối tương ứng.
Độ rộng kết hợp của các đường đồng mức tạo ấn tượng thị giác về mức lồng nhau, ngoài bản đồ nhiệt.
Độ rộng của NestView có thể thay đổi kích thước thủ công, nhưng không nên thay đổi khi mã thay đổi. Các đường đồng mức có thể được nén hoặc cắt bớt để tiếp tục đạt được điều này.
Các dòng trống đôi khi được sử dụng mã để chia văn bản thành các phần dễ tiêu hóa hơn. Những dòng như vậy có thể kích hoạt hành vi đặc biệt trong NestView. Ví dụ, bản đồ nhiệt có thể được đặt lại hoặc một đường viền màu nền được sử dụng hoặc cả hai.
Một hoặc nhiều đường đồng mức liên quan đến mã hiện được chọn có thể được tô sáng. Đường đồng mức được liên kết với mức mã được chọn sẽ được nhấn mạnh nhất, nhưng các đường đồng mức khác cũng có thể 'sáng lên' ngoài ra để giúp làm nổi bật nhóm lồng nhau có chứa
Các hành vi khác nhau (chẳng hạn như gấp mã hoặc chọn mã) có thể được liên kết với nhấp / nhấp đúp vào Đường viền.
Các phần khác nhau của một đường viền (cạnh đầu, giữa hoặc đuôi) có thể có các hành vi động khác nhau liên quan.
Chú giải công cụ có thể được hiển thị trên một sự kiện di chuột qua đường viền
NestView được cập nhật liên tục khi mã được chỉnh sửa. Trường hợp lồng không phải là các giả định cân bằng tốt có thể được thực hiện khi mức độ lồng phải kết thúc, nhưng các đường đồng mức tạm thời liên quan phải được làm nổi bật theo một cách nào đó như một cảnh báo.
Hành vi kéo và thả của Đường viền có thể được hỗ trợ. Hành vi có thể thay đổi tùy theo phần đường viền được kéo.
Các tính năng thường thấy ở lề trái như đánh số dòng và tô sáng màu cho các lỗi và trạng thái thay đổi có thể che phủ NestView.
Chức năng bổ sung
Đề xuất giải quyết một loạt các vấn đề bổ sung - nhiều vấn đề nằm ngoài phạm vi của câu hỏi ban đầu, nhưng là một tác dụng phụ hữu ích.
Trực quan liên kết bắt đầu và kết thúc của một khu vực lồng nhau
Các đường đồng mức kết nối điểm bắt đầu và kết thúc của từng cấp độ lồng nhau
Làm nổi bật bối cảnh của dòng hiện được chọn
Khi mã được chọn, mức lồng liên kết trong NestView có thể được tô sáng
Phân biệt giữa các vùng mã ở cùng mức lồng nhau
Trong trường hợp XML, các màu khác nhau có thể được sử dụng cho các không gian tên khác nhau. Các ngôn ngữ lập trình (như c #) hỗ trợ các vùng được đặt tên có thể được sử dụng theo cách tương tự.
Phân chia các khu vực trong một khu vực làm tổ thành các khối hình ảnh khác nhau
Các dòng bổ sung thường được chèn vào mã để hỗ trợ khả năng đọc. Các dòng trống như vậy có thể được sử dụng để đặt lại mức bão hòa của các đường đồng mức của NestView.
Chế độ xem mã nhiều cột
Mã không có thụt lề làm cho việc sử dụng chế độ xem nhiều cột hiệu quả hơn vì cuộn từ hoặc cuộn ngang ít có khả năng được yêu cầu. Theo quan điểm này, một khi mã đã chạm đến đáy của một cột, nó sẽ chảy vào cột tiếp theo:
Sử dụng ngoài việc chỉ cung cấp một trợ giúp trực quan
Như đã đề xuất trong tổng quan, NestView có thể cung cấp một loạt các tính năng chỉnh sửa và lựa chọn phù hợp với những gì được mong đợi từ điều khiển TreeView. Sự khác biệt chính là một nút TreeView điển hình có 2 phần: phần mở rộng và biểu tượng nút. Một đường đồng mức NestView có thể có tới 3 phần: phần mở (dốc), đầu nối (dọc) và đóng (dốc).
Vào thụt
NestView được trình bày cùng với các bổ sung mã không thụt lề, nhưng không thể thay thế, chế độ xem mã thụt lề thông thường.
Có vẻ như bất kỳ giải pháp nào áp dụng NestView, sẽ cung cấp một phương pháp để chuyển đổi liền mạch giữa các chế độ xem mã được thụt lề và không thụt lề mà không ảnh hưởng đến bất kỳ văn bản mã nào - bao gồm các ký tự khoảng trắng. Một kỹ thuật cho chế độ xem thụt lề sẽ là 'Định dạng ảo' - trong đó sử dụng lề trái động thay cho các ký tự tab hoặc dấu cách. Dữ liệu mức lồng nhau tương tự được sử dụng để hiển thị động NestView cũng có thể được sử dụng cho chế độ xem thụt lề trông thông thường hơn.
In ấn
Việc thụt lề sẽ rất quan trọng đối với khả năng đọc mã in. Ở đây, sự vắng mặt của các ký tự tab / dấu cách và lề trái động có nghĩa là văn bản có thể bao bọc ở lề phải và vẫn duy trì tính toàn vẹn của chế độ xem thụt lề. Số dòng có thể được sử dụng làm điểm đánh dấu trực quan cho biết nơi mã được bọc từ và cũng là vị trí chính xác của thụt lề:
Bất động sản màn hình: Flat Vs Indents
Giải quyết câu hỏi liệu NestView có sử dụng bất động sản màn hình có giá trị hay không:
Các đường đồng mức hoạt động tốt với chiều rộng giống như chiều rộng ký tự của trình soạn thảo mã. Do đó, chiều rộng của NestView là 12 ký tự có thể chứa 12 cấp độ lồng trước khi các đường đồng mức bị cắt / nén.
Nếu chế độ xem thụt lề sử dụng 3 chiều rộng ký tự cho mỗi cấp độ lồng thì không gian được lưu cho đến khi lồng đạt 4 cấp độ lồng, sau cấp độ lồng này, chế độ xem phẳng có lợi thế tiết kiệm không gian tăng theo từng cấp độ lồng.
Lưu ý: Việc thụt lề tối thiểu 4 độ rộng ký tự thường được đề xuất cho mã, tuy nhiên XML thường quản lý với ít hơn. Ngoài ra, Định dạng ảo cho phép sử dụng ít thụt lề hơn vì không có rủi ro về các vấn đề căn chỉnh
Một so sánh của 2 lượt xem được hiển thị dưới đây:
Dựa trên những điều trên, có lẽ công bằng khi kết luận rằng lựa chọn phong cách xem sẽ dựa trên các yếu tố khác ngoài màn hình bất động sản. Một ngoại lệ là không gian màn hình ở mức cao, ví dụ như trên Netbook / Tablet hoặc khi nhiều cửa sổ mã được mở. Trong những trường hợp này, NestView có thể thay đổi kích thước dường như là một người chiến thắng rõ ràng.
Trường hợp sử dụng
Ví dụ về các ví dụ trong thế giới thực nơi NestView có thể là một tùy chọn hữu ích:
Bất động sản màn hình ở mức cao
a. Trên các thiết bị như máy tính bảng, notepad và điện thoại thông minh
b. Khi hiển thị mã trên các trang web
c. Khi nhiều cửa sổ mã cần phải được hiển thị trên màn hình cùng một lúc
Trong đó việc thụt lề khoảng trắng nhất quán của văn bản trong mã là ưu tiên
Để xem xét mã lồng nhau sâu sắc. Ví dụ: nơi các ngôn ngữ phụ (ví dụ Linq trong C # hoặc XPath trong XSLT) có thể gây ra mức lồng nhau cao.
Khả năng tiếp cận
Tùy chọn thay đổi kích thước và màu sắc phải được cung cấp để hỗ trợ những người khiếm thị, và cũng phù hợp với điều kiện môi trường và sở thích cá nhân:
Khả năng tương thích của mã được chỉnh sửa với các hệ thống khác
Một giải pháp kết hợp tùy chọn NestView lý tưởng có khả năng tước bỏ các ký tự không gian và tab hàng đầu (được xác định là chỉ có vai trò định dạng) từ mã được nhập. Sau đó, một khi bị tước, mã có thể được hiển thị gọn gàng trong cả hai chế độ xem trái và thụt lề mà không thay đổi. Đối với nhiều người dùng dựa vào các hệ thống như hợp nhất và các công cụ tìm khác biệt không nhận biết được khoảng trắng, đây sẽ là một mối quan tâm lớn (nếu không phải là trình dừng hiển thị hoàn chỉnh).
Những công việc khác:
Hình dung của đánh dấu chồng chéo
Nghiên cứu được công bố bởi Wendell Piez , ngày từ năm 2004, đề cập đến vấn đề trực quan hóa đánh dấu chồng chéo, cụ thể là LMNL . Điều này bao gồm đồ họa SVG với sự tương đồng đáng kể với đề xuất NestView, do đó, chúng được thừa nhận ở đây.
Sự khác biệt về hình ảnh là rõ ràng trong các hình ảnh (bên dưới), sự khác biệt về chức năng chính là NestView chỉ dành cho XML hoặc mã được lồng ghép tốt, trong khi đồ họa của Wendell Piez được thiết kế để thể hiện lồng nhau chồng chéo.
Đồ họa ở trên đã được sao chép - với sự cho phép - từ http://www.piez.org
Nguồn: