Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта

Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта

Долгая история запросов на внедрение темного интерфейса в среду разработки привела к созданию независимого приложения для работы с файлами конфигурации. В материале рассматривается разработка утилиты, позволяющей открыть конфигурацию без штатной платформы, изучить внутреннюю структуру контейнеров и реализовать поддержку темных цветовых схем.

Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта
Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта — изображение 10
Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта — изображение 11
Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта — изображение 12
Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта — изображение 13
Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта — изображение 14
Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта — изображение 15
Как создавалась тёмная тема для среды разработки: разбор нестандартного проекта — изображение 16

Многолетние попытки пользователей изменить оформление среды разработки обычно ограничивались редактированием подсветки модуля кода. В то время как текстовые редакторы и сторонние инструменты позволяли настраивать цвета, дерево объектов, панели свойств и меню оставались светлыми. Появление официальных обновлений интерфейса затрагивало лишь пользовательскую часть, оставляя разработчиков в привычном светлом контуре.

Архитектура файла конфигурации и матрёшка контейнеров

Для создания собственного интерфейса потребовалось напрямую обратиться к файлу конфигурации размером около гигабайта. Внутри он устроен по принципу вложенных контейнеров: страничный каталог содержит оглавление и множество сжатых записей. Некоторые из них скрывают внутри себя другие контейнеры, заполненные специфическими скобочными структурами без явных схем и имён полей.

Реклама

Извлеченные данные позволяют выстроить дерево объектов, отображающее структуру конфигурации, включая формы и модули. Поскольку штатная среда отображает только видимые строки, даже массивные модули загружаются мгновенно. Реализация собственного движка подсветки позволила интегрировать готовые цветовые схемы из Notepad++, предоставив пользователям выбор из десятков оформлений без ручного ввода шестнадцатеричных кодов.

Контроль точности и проверка байт в байт

Чтобы убедиться в корректности расшифровки неформатированного хранилища, автор проекта применил строгий метод проверки. Процесс чтения файла транслируется в XML-выгрузку, которая затем сопоставляется с аналогичными данными штатной платформы с точностью до каждого байта, включая переводы строк и табуляцию. Для крупной прикладной конфигурации совпадение достигается на десятках тысяч файлов.

Окно разработанного приложения в светлой цветовой схеме
Интерфейс разработанной программы в светлом режиме
Интерфейс программы после активации темной темы
Полное переключение интерфейса в темную схему

Обратная процедура загрузки XML требует идеального понимания каждого элемента и атрибута. Любая неточность приводит к отказу в загрузке с фиксацией причины, что исключает скрытую потерю данных. Окончательную проверку выполняет сама платформа, принимая сгенерированную выгрузку для сверки записей.

Структура данных внутри файла конфигурации
Организация данных во внутреннем контейнере

Особенности обхода хэш-таблиц и разбор языка запросов

В ходе работы выяснилось, что порядок следования некоторых записей в файле определяется не алфавитом или уникальными идентификаторами, а спецификой обхода стандартной хэш-таблицы из библиотеки MSVC. Порядок элементов зависит от параметров бакетов и хэша строк, поэтому для сохранения совместимости пришлось программно воспроизвести алгоритм чужой хэш-таблицы.

Подсветка кода Monokai в редакторе модулей
Реализация темной подсветки синтаксиса
Подсветка кода Obsidian в редакторе модулей
Интеграция темы Obsidian из редактора Notepad++

Для корректной работы с динамическими списками в формах потребовалось реализовать собственный синтаксический анализатор запросов. Лексер и грамматика вычисляют имена полей при помощи правил склеивания путей после источника, что заменяет штатный механизм компиляции запросов.

Сравнение результатов выгрузки и загрузки файлов
Контроль точности выгрузки и загрузки

Итоги работы и показатели производительности

Тестирование самодельного движка на конфигурации объемом около 1 ГБ с десятками тысяч файлов выигрывает по скорости у штатной платформы, которой требуется предварительная загрузка данных в базу данных. Готовый инструмент обеспечивает чтение и запись файлов, работу с деревом свойств и модулей, а также функционирует в режиме командной строки для интеграции с процессами непрерывной интеграции.

График сравнения скорости работы движка и платформы
Сравнение скорости обработки данных
01.