Mise en cache (internationalisation)
Uniscribe enregistre les mappages Unicode-à-glyphe (cmap), les largeurs de glyphes et les tables de mise en forme de script OpenType. Un handle des tables pour une police particulière d’une taille particulière est appelé « cache de script ». De nombreuses fonctions Uniscribe appellent à la fois un paramètre de handle de contexte d’appareil et un pointeur vers une structure SCRIPT_CACHE . Ces fonctions recherchent d’abord des informations via le cache de script, en utilisant le contexte de l’appareil uniquement lorsque les tables requises ne sont pas déjà mises en cache. Lors de l’appel de la fonction ScriptShape, ScriptPlace ou ScriptTextOut , l’application doit passer un pointeur vers une structure SCRIPT_CACHE . Le handle doit être initialisé sur NULL avant la première fois que l’application le transmet à une fonction Uniscribe. L’application ne doit jamais passer le même handle pour différentes polices ou tailles.
Une application peut libérer un cache de script à tout moment. Uniscribe conserve le nombre de références dans ses caches de police et de shaper, libère les données de police uniquement lorsque toutes les tailles de la police sont libérées, et libère les données de shaper uniquement lorsque toutes les polices que le shaper prend en charge sont libérées. Lorsque l’application est terminée avec un style, elle doit appeler la fonction ScriptFreeCache pour libérer le cache de script pour le style.
Pour ScriptShape et ScriptPlace, il est valide que l’application passe un contexte d’appareil null. Le plus souvent, l’appel réussit, car les tables requises sont déjà mises en cache. Si la mise en forme ou le placement nécessite l’accès à un contexte d’appareil, ScriptShape ou ScriptPlace retourne immédiatement avec le code d’erreur E_PENDING. Ensuite, l’application doit sélectionner la police dans le contexte de l’appareil. Pour la plupart des applications, cela améliore les performances en évitant la préparation répétée d’un handle de contexte d’appareil avec des appels à SelectObject.