const char *prefix,
unsigned char (*normalize) (unsigned char))
{
- if (private_use_subtag && count && tags && *count)
- {
- const char *s = strstr (private_use_subtag, prefix);
- if (s)
- {
- char tag[4];
- int i;
- s += strlen (prefix);
- for (i = 0; i < 4 && ISALNUM (s[i]); i++)
- tag[i] = normalize (s[i]);
- if (i)
- {
- for (; i < 4; i++)
- tag[i] = ' ';
- tags[0] = HB_TAG (tag[0], tag[1], tag[2], tag[3]);
- if ((tags[0] & 0xDFDFDFDF) == HB_OT_TAG_DEFAULT_SCRIPT)
- tags[0] ^= ~0xDFDFDFDF;
- *count = 1;
- return false;
- }
- }
- }
+ if (!(private_use_subtag && count && tags && *count)) return false;
+
+ const char *s = strstr (private_use_subtag, prefix);
+ if (!s) return false;
+
+ char tag[4];
+ int i;
+ s += strlen (prefix);
+ for (i = 0; i < 4 && ISALNUM (s[i]); i++)
+ tag[i] = normalize (s[i]);
+ if (!i) return false;
+
+ for (; i < 4; i++)
+ tag[i] = ' ';
+ tags[0] = HB_TAG (tag[0], tag[1], tag[2], tag[3]);
+ if ((tags[0] & 0xDFDFDFDF) == HB_OT_TAG_DEFAULT_SCRIPT)
+ tags[0] ^= ~0xDFDFDFDF;
+ *count = 1;
return true;
}
limit = s;
}
- needs_script = parse_private_use_subtag (private_use_subtag, script_count, script_tags, "-hbsc", TOLOWER);
- needs_language = parse_private_use_subtag (private_use_subtag, language_count, language_tags, "-hbot", TOUPPER);
+ needs_script = !parse_private_use_subtag (private_use_subtag, script_count, script_tags, "-hbsc", TOLOWER);
+ needs_language = !parse_private_use_subtag (private_use_subtag, language_count, language_tags, "-hbot", TOUPPER);
if (needs_language && language_count && language_tags && *language_count)
hb_ot_tags_from_language (lang_str, limit, language_count, language_tags);