Función ScriptShapeOpenType (usp10.h)

Genera glifos y atributos visuales para una ejecución Unicode con información de OpenType. Cada ejecución consta de una llamada a esta función.

Sintaxis

HRESULT ScriptShapeOpenType(
  [in, optional] HDC                  hdc,
  [in, out]      SCRIPT_CACHE         *psc,
  [in, out]      SCRIPT_ANALYSIS      *psa,
  [in]           OPENTYPE_TAG         tagScript,
  [in]           OPENTYPE_TAG         tagLangSys,
  [in, optional] int                  *rcRangeChars,
  [in, optional] TEXTRANGE_PROPERTIES **rpRangeProperties,
  [in]           int                  cRanges,
  [in]           const WCHAR          *pwcChars,
  [in]           int                  cChars,
  [in]           int                  cMaxGlyphs,
  [out]          WORD                 *pwLogClust,
  [out]          SCRIPT_CHARPROP      *pCharProps,
  [out]          WORD                 *pwOutGlyphs,
  [out]          SCRIPT_GLYPHPROP     *pOutGlyphProps,
  [out]          int                  *pcGlyphs
);

Parámetros

[in, optional] hdc

Identificador del contexto del dispositivo. Para más información, consulte Almacenamiento en caché.

[in, out] psc

Puntero a una estructura de SCRIPT_CACHE que identifica la caché de scripts.

[in, out] psa

Puntero a una estructura de SCRIPT_ANALYSIS obtenida de una llamada anterior a ScriptItemizeOpenType. La estructura identifica el motor de forma, de modo que los glifos se puedan formar correctamente.

Como alternativa, la aplicación puede establecer este parámetro en NULL para recibir resultados sin filtrar.

[in] tagScript

Estructura de OPENTYPE_TAG que define la etiqueta de script OpenType para el sistema de escritura.

[in] tagLangSys

Estructura OPENTYPE_TAG que contiene la etiqueta de idioma OpenType para el sistema de escritura.

[in, optional] rcRangeChars

Matriz de caracteres en cada intervalo. El número de elementos de matriz se indica mediante cRanges. Los valores de los elementos de esta matriz se suman al valor de cChars.

[in, optional] rpRangeProperties

Matriz de estructuras de TEXTRANGE_PROPERTIES , cada una de las cuales representa un intervalo de características openType. El número de estructuras se indica mediante el parámetro cRanges . Para obtener más información sobre rpRangeProperties, vea la sección Comentarios.

[in] cRanges

Número de intervalos de características openType.

[in] pwcChars

Puntero a una matriz de caracteres Unicode que contiene la ejecución.

[in] cChars

Número de caracteres de la ejecución unicode.

[in] cMaxGlyphs

Número máximo de glifos que se van a generar.

[out] pwLogClust

Puntero a un búfer en el que esta función recupera una matriz de información de clúster lógico. Cada elemento de matriz corresponde a un carácter de la matriz de caracteres Unicode. El valor de cada elemento es el desplazamiento del primer glifo de la ejecución al primer glifo del clúster que contiene el carácter correspondiente. Tenga en cuenta que, cuando el miembro fRTL de la estructura de SCRIPT_ANALYSIS es TRUE, los elementos se reducen a medida que se lee la matriz.

[out] pCharProps

Puntero a un búfer en el que esta función recupera una matriz de valores de propiedad de caracteres, de longitud indicada por cChars.

[out] pwOutGlyphs

Puntero a un búfer en el que esta función recupera una matriz de glifos.

[out] pOutGlyphProps

Puntero a un búfer en el que esta función recupera una matriz de atributos para cada uno de los glifos recuperados. La longitud de los valores es igual al valor de pcGlyphs. Dado que se indica una propiedad de glifo por glifo, el valor de este parámetro indica el número de elementos especificados por cMaxGlyphs.

[out] pcGlyphs

Puntero a la ubicación en la que esta función recupera el número de glifos indicados en pwOutGlyphs.

Valor devuelto

Si la operación se realiza correctamente, devuelve 0. La función devuelve un valor HRESULT distinto de cero si no se realiza correctamente. En todos los casos de error, el contenido de todos los valores de matriz de salida no está definido.

Los errores devueltos incluyen:

  • E_OUTOFMEMORY. La longitud del búfer de salida indicada por cMaxGlyphs no es suficiente.
  • E_PENDING. La caché de scripts especificada por el parámetro psc no contiene suficiente información para dar forma a la cadena y el contexto del dispositivo se ha pasado como NULL para que la función no pueda completar el proceso de forma. La aplicación debe configurar un contexto de dispositivo correcto para la ejecución y llamar a esta función de nuevo con el valor de contexto adecuado en hdc y con todos los demás parámetros iguales.
  • USP_E_SCRIPT_NOT_IN_FONT. La fuente correspondiente al contexto del dispositivo no admite el script necesario. La aplicación debe elegir otra fuente, mediante ScriptGetCMap u otro método para seleccionar la fuente.

Comentarios

Se prefiere ScriptShapeOpenType sobre la función ScriptShape anterior. Entre las ventajas de ScriptShapeOpenType se incluyen las siguientes:

  • Los parámetros corresponden directamente a etiquetas OpenType en tablas de diseño de fuentes.
  • Los parámetros definen características aplicadas a cada carácter.
  • La entrada se divide en ejecuciones. Cada ejecución tiene propiedades OpenType y consta de una sola llamada a ScriptShapeOpenType.
Si esta función devuelve E_OUTOFMEMORY, la aplicación podría llamar a ScriptShapeOpenType repetidamente, con búferes de salida sucesivamente más grandes, hasta que se proporcione un búfer lo suficientemente grande. El número de glifos generados por un punto de código varía según el script y la fuente. Para un script simple, un punto de código Unicode podría generar un único glifo. Sin embargo, una fuente de script compleja podría construir caracteres a partir de componentes y, por tanto, generar varios glifos como caracteres. Además, hay casos especiales, como representaciones de caracteres no válidas, en los que se agregan glifos adicionales para representar la secuencia no válida. Por lo tanto, una estimación razonable para el tamaño del búfer indicado por pwOutGlyphs es 1,5 veces la longitud del búfer de caracteres, además de 16 glifos adicionales para casos poco frecuentes, por ejemplo, representación de secuencia no válida.

Esta función puede establecer el miembro fNoGlyphIndex de la estructura SCRIPT_ANALYSIS si la fuente o el sistema operativo no pueden admitir índices de glifo.

La aplicación puede llamar a ScriptShapeOpenType para determinar si una fuente admite los caracteres de una cadena determinada. Si la función devuelve S_OK, la aplicación debe comprobar la salida de los glifos que faltan. Si fLogicalOrder se establece en TRUE en la estructura SCRIPT_ANALYSIS , la función siempre genera glifos en el mismo orden que los caracteres Unicode originales. Si fLogicalOrder se establece en FALSE, la función genera elementos de derecha a izquierda en orden inverso para que ScriptTextOut no tenga que invertirlos antes de llamar a ExtTextOut.

Si el miembro eScript de SCRIPT_ANALYSIS se establece en SCRIPT_UNDEFINED, se deshabilita la forma. En este caso, ScriptShapeOpenType muestra el glifo que se encuentra en la tabla de cmap de fuente. Si no hay glifo en la tabla, la función indica que faltan glifos.

ScriptShapeOpenType secuencia clústeres uniformemente dentro de la ejecución y secuencias glifos uniformemente dentro de un clúster. Usa el valor del miembro fRTL de SCRIPT_ANALYSIS, de ScriptItemizeOpenType, para identificar si la secuenciación es de izquierda a derecha o de derecha a izquierda.

Para el parámetro rpRangeProperties , la estructura TEXTRANGE_PROPERTIES apunta a una matriz de estructuras de OPENTYPE_FEATURE_RECORD . Esta matriz se usa de la siguiente manera:

  • Cada elemento de la matriz indicado para rpRangeProperties describe un intervalo.
  • Los intervalos de propiedades particulares de uso compartido de texto tienden a "anidar" y los intervalos anidados pueden compartir OPENTYPE_FEATURE_RECORD información. Por ejemplo, en la ilustración siguiente:
    • Las filas de números en la parte superior representan intervalos, elementos y ejecuciones, respectivamente.
    • Cada intervalo etiquetado aquí con una letra representa una única característica OpenType. Las características que se encuentran en cada intervalo se almacenan en la matriz OPENTYPE_FEATURE_RECORD de ese intervalo.
    • Para cada intervalo, la matriz de estructuras de OPENTYPE_FEATURE_RECORD corresponde a las letras de los intervalos que contienen ese intervalo.
    • En esta ilustración, el intervalo 2 está asociado indirectamente a las estructuras de OPENTYPE_FEATURE_RECORD para los intervalos A, B y C. El intervalo 4 solo está asociado a las estructuras de los intervalos A y D.
Ilustración que muestra el intervalo, el elemento, la ejecución y la característica de cada palabra en una línea de texto que usa seis propiedades para presentar ocho palabras
Nota En la ilustración se usan muchas llamadas a ScriptShapeOpenType, cada una de las cuales representa una ejecución.
 
Importante A partir de Windows 8: para mantener la capacidad de ejecutarse en Windows 7, un módulo que usa Uniscribe debe especificar Usp10.lib antes de gdi32.lib en su lista de bibliotecas.
 

Ejemplos

En el ejemplo siguiente se muestra cómo ScriptShapeOpenType genera una matriz de clúster lógico (pwLogClust) a partir de una matriz de caracteres (pwcChars) y una matriz de glifos (pwOutGlyphs). La ejecución tiene cuatro clústeres.

  • Primer clúster: un carácter representado por un glifo
  • Segundo clúster: un carácter representado por tres glifos
  • Tercer clúster: tres caracteres representados por un glifo
  • Cuarto clúster: dos caracteres representados por tres glifos
La ejecución se describe de la siguiente manera en las matrices de caracteres y glifos.

Matriz de caracteres:

  • | c1u1 | c2u1 | c3u1 c3u2 c3u3 | c4u1 c4u2 |
Matriz de glifos:
  • | c1g1 | c2g1 c2g2 c2g3 | c3g1 | c4g1 c4g2 c4g3 |
La notación de los elementos de matriz consta de estos elementos:
  • c<n> significa el clúster n.
  • g<m> significa glifo m.
  • u<p> significa punto de código Unicode p.
La matriz de clúster generada almacena desplazamientos en el clúster que contiene el carácter . Las unidades se expresan en glifos.
  • | 0 | 1 | 4 4 4 | 5 5 |

Requisitos

   
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado usp10.h
Library Usp10.lib
Archivo DLL Usp10.dll
Redistribuible Usp10.dll versión 1.600 o posterior en Windows XP

Consulte también

Mostrar texto con Uniscribe

OPENTYPE_FEATURE_RECORD

SCRIPT_ANALYSIS

ScriptItemizeOpenType

ScriptPlaceOpenType

ScriptShape

ScriptTextOut

TEXTRANGE_PROPERTIES

Funciones de uniscribe