RTF текст пуст - PullRequest
       27

RTF текст пуст

1 голос
/ 23 марта 2012

Существует ли в C ++ простой способ определить, есть ли в текстовой строке RTF какое-либо содержимое, кроме чистого форматирования.

Например, этот текст является только форматированием, здесь нет реального содержимого:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}}

Загрузка RTF-текста в RichTextControl - не вариант, я хочу что-то, что будет работать быстро и потребовать минимальных ресурсов.

1 Ответ

0 голосов
/ 23 марта 2012

Единственный надежный способ - написать собственный анализатор RTF [spec] , использовать библиотеку, например LibRTF , или вы можете оставить открытым RichTextControl и обновить его с помощьюновые документы RTF вместо того, чтобы каждый раз уничтожать объект.

Я считаю, что RTF не является обычным языком, поэтому не может быть правильно проанализирован RegEx (в отличие от HTML, несмотря на миллионы попыток сделать это), но вы делаетене нужно писать полный анализатор RTF.Я бы начал с простого парсера строк.Попробуйте:

  1. Удалить содержимое между {\ и}
  2. Удалить теги.Теги начинаются с обратной косой черты, \, и сопровождаются текстом.Если за обратной косой чертой следует пробел, это не тег.
  3. Документ должен заканчиваться хотя бы одной закрывающей фигурной скобкой,}

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

...