OpenReadyAlreadyBlockedMergedClosed Pull Request from sgakerru/plasma5-kfilemetadata: rosa2023.1 into import/plasma5-kfilemetadata: rosa2023.1 by sgakerru
Add rtf extractor
Была реализована поддержка формата RTF как для поиска текста по содержимому, так и для выгрузки метаданных (заголовок, автор, тема).
Реализована поддержка трех видов RTF-документов:
1. Документ сохранен в кодировке Windows-1251, текст закодирован напрямую в виде русских символов.
2. Документ сохранен в UTF-8, текст закодирован через экранирование символов \'?? в кодировке Windows-1251.
3. Документ сохранен в UTF-8, текст закодирован через экранирование символов \u???? в нестандартном представлении кодировки UTF-16 (например, так сохраняет LibreOffice).
Для этого было сделано следующее:
1. Перенесена библиотека rtf-qt из проекта Calligra (входит в KDE) в KFileMetadata.
2. Исправлены все неявные приведения строк ASCII к QString в библиотеке rtf-qt для возможности сборки библиотеки в рамках KFileMetadata, где запрещены неявные преобразования.
3. Библиотека rtf-qt была модифицирована для поддержки экранирования символов в другой кодировке в метаданных (в случае юникодной кодировки \u???? и не-юникодной например windows-1251 (\'??). Без этой модификации в RTF сохраненным в UTF-8 (тип 2 и тип 3, см. выше) вместо метаданных были кракозябры.
4. В библиотеке rtf-qt была добавлена обработка ситуации с тегами \upr и \ud, для того, чтобы считывать именно юникодный \ud вариант, вместо поврежденного текста в Latin1 кодировке. Без этого изменения некоторые теги считывались как кракозябры, например тег заголовка, в документе сохраненном в LibreOffice.
5. В библиотеке rtf-qt была добавлена обработка ситуации с пустыми тегами для количества страниц и слов (например, так сохраняет LibreOffice, не заполняя эти теги). Без этого изменения в этих тегах были некорректные значения количества страниц и слов.
6. Добавлен rtfextractor для KFileMetadata, который умеет получать содержимое документа, а также следующие теги:
1. Автор.
2. Тема.
3. Заголовок.
4. Описание (комментарий).
5. Ключевые слова.
6. Программа, которой был создан документ.
7. Дата создания.
8. Количество страниц.
9. Количество слов.
New comment