В рамках лабораторной работы выполняется имитация разработки кроссплатформенного текстового процессора, аналогичного Microsoft Word. Основная цель — получить навыки планирования архитектуры программного продукта и работы с системой контроля версий. Проект разбит на логические модули, каждый из которых отвечает за конкретную функциональность. Ниже представлен подробный план разработки.
Разработка основного окна приложения. Главный элемент — это «лента» с вкладками («Главная», «Вставка», «Разметка страницы» и т.д.), как в современном Word. На ленте размещаются кнопки, выпадающие списки и галереи стилей. Ниже ленты — рабочая область с линейками и самим документом. Задача модуля — отрисовать этот интерфейс и реагировать на нажатия пользователя (например, при нажатии «Копировать» — передать команду модулю редактирования). Интерфейс должен быть интуитивно понятным и масштабируемым под разные разрешения экрана.
Это сердце редактора. Модуль отвечает за отображение текста на экране, управление курсором (мигающий, меняет форму при выделении), обработку ввода с клавиатуры. Сюда же входит базовая логика выделения текста мышью или клавиатурой, а также операции «Вырезать/Копировать/Вставить» и, конечно, система отмены действий (Undo/Redo), без которой редактор не имеет смысла. Модель документа должна храниться в памяти в виде структуры, позволяющей быстро выполнять эти операции.
Модуль инструментов для изменения внешнего вида текста. Сюда относится:
- Шрифты: выбор гарнитуры, размера, цвета, начертания (жирный, курсив, подчёркнутый).
- Абзацы: выравнивание (слева, по центру, по ширине, справа), отступы слева и справа, отступ первой строки, междустрочный интервал.
- Заливка и границы абзацев: возможность задать фон абзаца и обрамление. Когда пользователь меняет настройки в интерфейсе (пункт 1), этот модуль применяет их к текущему выделению или ко всему документу.
Более умная версия форматирования. Разработка механизма стилей (например, «Заголовок 1», «Обычный текст»). Стиль — это набор настроек шрифта и абзаца, сохраненный под одним именем. Модуль должен позволять пользователю применять стиль к абзацу, изменять существующие стили и создавать новые. Изменение стиля должно автоматически обновлять весь текст, к которому он применён. Это основа для создания структурированных документов (оглавлений, списков).
Возможность вставить в текст картинку (с диска или через буфер обмена). После вставки картинку нужно уметь выделять, менять её размер (перетаскивая углы) и примерно позиционировать относительно текста (например, «обтекание сверху и снизу» или «по контуру»). В упрощенном варианте — также поддержка вставки простых геометрических фигур (прямоугольник, линия, овал) с возможностью изменения цвета заливки и контура.
Модуль, отвечающий за то, чтобы наши документы можно было сохранить и потом открыть. Основная задача — поддержка собственного упрощенного формата (например, на основе ZIP и XML, как настоящий .docx).
Важное расширение — совместимость с другими офисными приложениями: необходимо реализовать импорт/экспорт в форматы .doc (бинарный формат старых версий Word), .odt (OpenDocument) и .rtf (Rich Text Format).
Также добавляется возможность сохранять документ как обычный текст (.txt) и экспортировать его в PDF (для этого можно использовать готовые библиотеки).
Поддержка HTML: модуль должен обеспечивать корректное отображение и импорт HTML-содержимого: при вставке HTML из буфера обмена или открытии HTML-файла форматирование (заголовки, списки, таблицы) должно преобразовываться во внутреннее представление документа и наоборот — при сохранении в HTML структура и стили должны максимально сохраняться.
Модуль должен корректно обрабатывать ошибки (повреждённый файл, отсутствие прав доступа).
Модуль, который позволяет увидеть, как документ будет выглядеть на бумаге. Нужно реализовать:
- Настройки страницы: размер бумаги (A4, A5, Letter), ориентация (книжная/альбомная), поля (верхнее, нижнее, левое, правое).
- Режим предварительного просмотра: отдельное окно, где документ отображается постранично с учётом настроек страницы.
- Диалог печати: вызов системного окна печати с выбором принтера, количества копий и диапазона страниц.
Разработка диалогового окна «Найти и заменить». Пользователь вводит слово, программа находит все его вхождения в документе и подсвечивает их. В режиме «Заменить» — находит слово и заменяет его на другое. Базовые опции: учёт регистра, поиск только целого слова, направление поиска (вперёд/назад). Для навигации нужны кнопки «Найти далее» и «Найти ранее», а также возможность заменить сразу все вхождения.
В современном редакторе обязательна не только орфографическая проверка. Модуль выполняет:
- Орфографию: сверку слов со встроенным словарём (первая версия — только русский язык). Незнакомые слова подчёркиваются красной волнистой линией, по клику правой кнопкой предлагаются варианты замены.
- Грамматику и стилистику: анализ согласования слов, падежей, времён; выявление тяжёлых для восприятия конструкций (например, слишком длинных предложений).
- Семантический анализ и тезаурус: проверка смысловой связности текста, обнаружение повторяющихся слов, неоднозначных формулировок. Тезаурус предоставляет пользователю списки синонимов и антонимов для выделенного слова, помогая улучшить стиль и точность выражений (аналог функции «Тезаурус» в Microsoft Word). В дальнейшем планируется подключение облачных сервисов для более глубокого анализа.
Реализация одного из самых сложных, но нужных элементов. Модуль должен позволять вставлять таблицу с заданным количеством строк и столбцов. Внутри таблицы должен работать ввод текста и базовое форматирование. Также нужны базовые операции с таблицей:
- добавить или удалить строку/столбец;
- объединить ячейки;
- изменить ширину столбцов и высоту строк (перетаскиванием границ);
- применить границы и заливку к ячейкам.
Интерфейс должен быть настраиваемым. Модуль отвечает за:
- Смену цветовой темы: светлая/тёмная (возможно, ещё контрастная).
- Настройку панели быстрого доступа: пользователь сам решает, какие кнопки у него всегда перед глазами.
- Единицы измерения на линейках: сантиметры, дюймы, пункты.
- Язык интерфейса (локализация): переключение между русским и английским языками с возможностью добавления других языков через файлы ресурсов.