[PATCH 1/5] usp10: Introduce a helper function to lookup a language in a LoadedScript structure.
Aric Stewart
aric at codeweavers.com
Tue Mar 28 07:17:22 CDT 2017
Signed-off-by: Aric Stewart <aric at codeweavers.com>
On 3/27/17 3:57 PM, Henri Verbeet wrote:
> Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
> ---
> dlls/usp10/opentype.c | 45 ++++++++++++++++++++++-----------------------
> 1 file changed, 22 insertions(+), 23 deletions(-)
>
> diff --git a/dlls/usp10/opentype.c b/dlls/usp10/opentype.c
> index e5e7ece..b58731a 100644
> --- a/dlls/usp10/opentype.c
> +++ b/dlls/usp10/opentype.c
> @@ -2610,6 +2610,19 @@ HRESULT OpenType_GetFontScriptTags(ScriptCache *psc, OPENTYPE_TAG searchingFor,
> return rc;
> }
>
> +static LoadedLanguage *usp10_script_get_language(LoadedScript *script, OPENTYPE_TAG tag)
> +{
> + size_t i;
> +
> + for (i = 0; i < script->language_count; ++i)
> + {
> + if (script->languages[i].tag == tag)
> + return &script->languages[i];
> + }
> +
> + return NULL;
> +}
> +
> static void GSUB_initialize_language_cache(LoadedScript *script)
> {
> int i;
> @@ -2646,6 +2659,7 @@ static void GPOS_expand_language_cache(LoadedScript *script)
> {
> int count;
> const OT_Script* table = script->gpos_table;
> + LoadedLanguage *language;
> DWORD offset;
>
> if (!table)
> @@ -2678,27 +2692,21 @@ static void GPOS_expand_language_cache(LoadedScript *script)
> }
> else if (count)
> {
> - int i,j;
> + int i;
> for (i = 0; i < count; i++)
> {
> int offset = GET_BE_WORD(table->LangSysRecord[i].LangSys);
> OPENTYPE_TAG tag = MS_MAKE_TAG(table->LangSysRecord[i].LangSysTag[0], table->LangSysRecord[i].LangSysTag[1], table->LangSysRecord[i].LangSysTag[2], table->LangSysRecord[i].LangSysTag[3]);
>
> - for (j = 0; j < script->language_count; j++)
> - {
> - if (script->languages[j].tag == tag)
> - {
> - script->languages[j].gpos_table = ((const BYTE*)table + offset);
> - break;
> - }
> - }
> - if (j == script->language_count)
> + if (!(language = usp10_script_get_language(script, tag)))
> {
> script->language_count++;
> - script->languages = HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,script->languages, sizeof(LoadedLanguage) * script->language_count);
> - script->languages[j].tag = tag;
> - script->languages[j].gpos_table = ((const BYTE*)table + offset);
> + script->languages = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
> + script->languages, script->language_count * sizeof(*script->languages));
> + language = &script->languages[script->language_count - 1];
> + language->tag = tag;
> }
> + language->gpos_table = (const BYTE *)table + offset;
> }
> }
> }
> @@ -2919,16 +2927,7 @@ HRESULT OpenType_GetFontFeatureTags(ScriptCache *psc, OPENTYPE_TAG script_tag, O
> if ((script->default_language.gsub_table || script->default_language.gpos_table) && script->default_language.tag == language_tag)
> language = &script->default_language;
> else
> - {
> - for (i = 0; i < script->language_count; i++)
> - {
> - if (script->languages[i].tag == language_tag)
> - {
> - language = &script->languages[i];
> - break;
> - }
> - }
> - }
> + language = usp10_script_get_language(script, language_tag);
>
> if (!language)
> {
>
More information about the wine-patches
mailing list