HTMLEditor для SwiftUI 1.1.0

Этот релиз посвящен обеспечению совместимости с Swift 6.3, существенному переписыванию обработки подсветки синтаксиса и значительному улучшению отзывчивости при редактировании очень больших HTML-документов.

Добавлено

  • Добавлен исполняемый таргет HTMLEditorBenchmarks для проведения повторяемых замеров производительности.
  • Добавлена поддержка бенчмарков для: полного планирования подсветки, повторного использования перекрытий (overlap reuse), инвалидации правок, переназначения видимой подсветки и путей локальной перерисовки больших документов.
  • Добавлены специализированные регрессионные тесты для:
    • повторного использования кэша планировщика и инвалидации в рамках документа;
    • крайних случаев с некорректными NSRange и кодировкой UTF-16;
    • подсветки значений атрибутов в кавычках и без них;
    • переназначения состояния видимой подсветки;
    • покрытия подсветки на уровне блоков;
    • политик редактирования и прокрутки больших документов.

Изменено

  • Runtime редактора была отрефакторена на более мелкие специализированные компоненты, включая отдельные файлы для жизненного цикла координатора, вьюпорта, редактирования, политик, покрытия, структурных диапазонов и состояния видимой подсветки.
  • Синтаксический анализатор был разбит на компоненты на базе планировщика и исполнителя для более четкого разделения этапов сканирования, планирования и применения подсветки.
  • Редактор переведен на адаптивную модель выполнения, которая меняет свое поведение в зависимости от размера документа, вместо того чтобы обрабатывать все HTML-документы одинаково.

Улучшено

  • Значительно улучшена производительность при редактировании больших документов благодаря:
    • приоритетной подсветке видимой области;
    • кэшированию планировщика в пределах документа и целевой инвалидации;
    • кэшированию планов видимых диапазонов;
    • отслеживанию покрытия подсветки на уровне блоков;
    • выравниванию структурных «грязных» диапазонов вокруг правок;
    • двухфазному редактированию больших файлов с немедленным микро-проходом и отложенной расширенной перерисовкой;
    • объединению частых правок для снижения частоты перерисовок;
    • семантической подсветке во время простоя прокрутки;
    • отложенной синхронизации привязок для больших документов;
    • автоматическому включению режима allowsNonContiguousLayout в режиме работы с большими файлами.
  • Повышена стабильность подсветки при наборе текста в середине очень большого HTML-документа за счет сохранения состояния видимого оверлея и уменьшения частоты перерисовок вокруг курсора.
  • Улучшена настройка производительности для больших файлов с помощью выделенных бенчмарков и runtime-зондов.

Исправлено

  • Исправлены проблемы компиляции и конкурентности, необходимые для совместимости с Swift 6.3.
  • Исправлено несколько проблем в путях обновления редактора, связанных с состоянием координатора, задачами подсветки и поведением main-actor.
  • Исправлены регрессии подсветки и крайние случаи, связанные с:
    • частичными тегами;
    • пустым вводом;
    • большими объемами данных;
    • раскраской значений атрибутов;
    • потерей видимой подсветки при редактировании больших файлов;
    • некорректными или обрезанными видимыми диапазонами.

Примечания

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

Попробуйте на GitHub: https://github.com/makoni/HTMLEditor-SwiftUI

Star Fork