Кэширование (интернационализация)
Uniscribe сохраняет сопоставления Юникода с глифами (cmap), ширину глифов и таблицы формирования скриптов OpenType. Дескриптор таблиц для определенного шрифта определенного размера называется "кэшем скриптов". Многие функции Uniscribe вызывают как параметр дескриптора контекста устройства, так и указатель на структуру SCRIPT_CACHE . Эти функции сначала ищут сведения через кэш скриптов, используя контекст устройства только в том случае, если необходимые таблицы еще не кэшируются. При вызове функции ScriptShape, ScriptPlace или ScriptTextOut приложение должно передать указатель на структуру SCRIPT_CACHE . Дескриптор должен быть инициализирован в значение NULL до того, как приложение впервые передаст его в функцию Uniscribe. Приложение никогда не должно передавать один и тот же дескриптор для разных шрифтов или разных размеров.
Приложение может освободить кэш скриптов в любое время. Uniscribe поддерживает количество ссылок в кэшах шрифтов и формировщиков, освобождает данные шрифта только при освобождении шрифтов всех размеров, а данные формировщика — только тогда, когда освобождаются все шрифты, поддерживаемые формировщиком. Когда приложение завершается со стилем, оно должно вызвать функцию ScriptFreeCache , чтобы освободить кэш скриптов для стиля.
Для ScriptShape и ScriptPlace приложение может передавать пустой контекст устройства. Чаще всего вызов выполняется успешно, так как необходимые таблицы уже кэшируются. Если для формирования или размещения требуется доступ к контексту устройства, ScriptShape или ScriptPlace немедленно возвращается с кодом ошибки E_PENDING. Затем приложение должно выбрать шрифт в контексте устройства. Для большинства приложений это помогает повысить производительность, избегая повторной подготовки дескриптора контекста устройства с помощью вызовов SelectObject.