SelectionUTF16ToUnit

Формы, взаимодействие, Unicode

Описание

Преобразует позицию UTF-16 с базой 0 внутри значения активной правки в количество полных единиц выделения При

fsuUTF16CodeUnit

С fsuUnicodeCodePoint или fsuGraphemeCluster таблица границ этой единицы строится по требованию и просматривается, поэтому позиция внутри суррогатной пары отображается на содержащую ее кодовую точку, а позиция внутри кластера — на границу предшествующего кластера

Таблицы границ кэшируются для текущего значения правки и отбрасываются всякий раз, когда это значение меняется

Объявление

function SelectionUTF16ToUnit(Index: Integer;
  IndexUnit: TPDFlibFormSelectionUnit): Integer;

Параметры

IndexПозиция UTF-16 с базой 0, ограничиваемая диапазоном от 0 до текущей длины значения
IndexUnitЕдиница выделения, в которой считается результат

Возвращаемое значение

Возвращает количество полных кодовых точек или графемных групп перед позицией UTF-16 либо сам ограниченный индекс для fsuUTF16CodeUnit

Пример

// A surrogate pair counts as one code point unit
Session.SetEditValue('A' + WideChar($D83D) + WideChar($DE00) + 'B');
CaretUnits := Session.SelectionUTF16ToUnit(3, fsuUnicodeCodePoint);
// CaretUnits = 2

См. также

SelectionUnitToUTF16, GetSelectionRange, SetSelectionRange, TPDFlibFormSelectionUnit, TPDFlibFormSession