Метод Position::getPreviousRange
Метод возвращает диапазон, который расположен перед текущим диапазоном. Размеры текущего и предыдущего диапазонов зависят от выбранной единицы текста. Если выбранная единица текста отлична от Paragraph, то работа метода Position::getPreviousRange ограничена текущим абзацем.
Вызов
boost::optional<Range> getPreviousRange(TextUnit textUnit)
Параметры
textUnit:единица текста, определяющая размеры диапазонов, тип TextUnit.
Возвращает
- предыдущий диапазон документа, тип Range.
Пример для текстового документа
Position sentenceBegin = document.getRange().getBegin().getNextRange(TextUnit::Sentence).get().getBegin();
Range previousSentence = sentenceBegin.getPreviousRange(TextUnit::Sentence).get();
Range previousWord = sentenceBegin.getPreviousRange(TextUnit::Word).get();
while (previousWord.getContentEnd().compare(previousWord.getBegin()) == 1)
{
previousWord = previousWord.getBegin().getPreviousRange(TextUnit::Word).get();
}
Range previousCharacter = sentenceBegin.getPreviousRange(TextUnit::Character).get();
previousCharacter = previousCharacter.getBegin().getPreviousRange(TextUnit::Character).get();
previousCharacter = previousCharacter.getBegin().getPreviousRange(TextUnit::Character).get();
std::printf("%s", previousSentence.extractText().c_str());
// Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
std::printf("%s", previousWord.extractText().c_str()); // aliqua
std::printf("%s", previousCharacter.extractText().c_str()); // a
Пример для табличного документа
Table sheet = document.getBlocks().getTable(0).get();
Cell cell = sheet.getCell("B2");
Position cellEnd = cell.getRange().getContentEnd();
Range sentence = cellEnd.getPreviousRange(TextUnit::Sentence).get();
std::printf("%s", sentence.extractText().c_str()); // Second sentence.