Введение 3
Постановка задачи 5
1. Обзор предметной области 6
1.1. Текстовый редактор 6
1.2. Аналоги 7
1.3. Jetpack Compose и Compose Desktop 12
1.4. Kotlin Multiplatform 14
1.5. Grazie 15
2. Разработка редактора 16
2.1. Архитектура 16
2.2. Пользовательский интерфейс 18
2.3. Взаимодействие со встроенными сервисами 22
3. Компонент CoreTextField в Jetpack Compose 25
3.1. Состояние компонента и отрисовка текста 25
3.2. Оптимизация отрисовки текста 26
3.3. Изменения в API CoreTextField и BasicTextField 28
4. Работа с текстом 30
4.1. Документная модель 30
4.1.1 Определение 30
4.1.2 Внешний вид элементов документной модели в редакторе 31
4.1.3 Экспорт в форматы Markdown и LaTeX 32
4.2. Класс TextState 34
4.3. Отрисовка результатов анализа 36
Заключение 39
Список литературы 40
С момента появления персональных компьютеров пользователи работают с текстовыми файлами: создают, сохраняют и редактируют их. Для работы с текстовыми файлами были созданы текстовые редакторы — программы, предоставляющие возможность работы с текстом в интерактивном режиме.
С развитием технологий и появлением языков разметки функциональность текстовых редакторов расширялась для упрощения работы с новыми форматами файлов.
Существуют редакторы не только для работы с естественными языками, но и с языками программирования. Для языков программирования разрабатываются так называемые редакторы программ. Редакторы программ обычно входят в состав интегрированных сред разработки — программных средств, используемых программистами для разработки программного обеспечения. Редакторы программ являются более продвинутыми в сравнении с редакторами для текстов на естественном языке. Языки программирования обладают формальным набором синтаксических, лексических и семантических правил, по коду можно построить дерево абстрактного синтаксиса, и поэтому становится возможным выполнение следующих задач:
• проверка наличия ошибок до компиляции программ
• разбиение на синтаксические конструкции для создания удобной подсветки кода
• автодополнение названия функции или другой конструкции языка на основе первых введенных символов
Открытия в области обработки естественных языков сегодня позволяют создавать модели машинного обучения, способные выполнять различные действия над естественными текстами [1]: разбивать на предложения, выделять термины или морфемы, проверять орфографию и пунктуацию, производить перевод на другой язык, генерировать новый текст и так далее. Стало возможным работать с естественными текстами схожим с языками программирования образом. Однако существующие текстовые редакторы не предоставляют возможность простого внедрения таких моделей, потому что они проектировались без учета возможности сложной обработки текста.
Создание редактора, способного внедрять сервисы, обрабатывающие естественный текст, позволит людям без опыта в программировании получить редактор с нужной им проверкой текста. Копирайтеры, журналисты, редакторы, писатели и другие люди, профессия которых связана с написанием текстов, получат возможность ускорить и автоматизировать свою работу, так как у них будет доступ к результатам анализа текста в самом редакторе.
Стоит также отметить, что многие современные редакторы являются кроссплатформенными и позволяют пользователям редактировать файлы с разных устройств: телефонов, планшетов, браузеров и т.д. Поэтому возможность работы редактора на разных платформах станет отдельным преимуществом.
В рамках работы был проведен обзор аналогов как среди редакторов текста, так и среди редакторов программ. Было выявлено, что они либо не решают поставленную задачу, либо предоставляемые ими возможности являются неудобными для конечного пользователя. Для реализации мульти- платформенного редактора была выбрана технология Kotlin Multiplatform. Реализованный редактор доступен на следующих платформах: MacOs, Linux, Windows, Android. Интерфейс для первых трёх платформ был реализован с использованием фреймворка Compose for Desktop, а интерфейс для Android и общая для всех платформ функциональность и компоненты интерфейса были реализованы с помощью фреймворка Jetpack Compose. Архитектура редактора, таким образом, состоит из общего модуля и модулей для Android и десктопа, её диаграмма представлена в 2.1.
Основная функциональность редактора — возможность встроить собственный сервис для проверки грамматики и автодополнения. Реализация интерфейса TextAnalyzer дает пользователям возможность встроить собственные сервисы. Руководство для встраивания сервиса также приведено в репозитории [36].
Дополнительно редактор позволяет экспортировать текст в такие известные форматы как Markdown и LaTeX, а так же есть возможность открывать ссылки, написанные в редакторе, в браузере.
В будущем планируется расширить множество элементов, поддерживаемых документной моделью. Вдобавок хочется предоставить пользователям возможность дополнительно декорировать текст (менять размер шрифта и его тип, и тому подобное), а также позволить редактировать языки разметки и анализировать их в самом редакторе.
Реализация редактора представлена в репозитории [36].