Lines Matching refs:face

468     const bool symbolFont = item->face->isSymbolFont;
898 static HB_Bool checkScript(HB_Face face, int script)
902 if (!face->gsub && !face->gpos)
909 if (!face->gsub)
913 HB_Error error = HB_GSUB_Select_Script(face->gsub, tag, &script_index);
916 error = HB_GSUB_Select_Script(face->gsub, HB_MAKE_TAG('D', 'F', 'L', 'T'), &script_index);
923 if (!face->gpos)
927 HB_Error error = HB_GPOS_Select_Script(face->gpos, script, &script_index);
930 error = HB_GPOS_Select_Script(face->gpos, HB_MAKE_TAG('D', 'F', 'L', 'T'), &script_index);
972 HB_Face face = (HB_Face )malloc(sizeof(HB_FaceRec));
973 if (!face)
976 face->isSymbolFont = false;
977 face->gdef = 0;
978 face->gpos = 0;
979 face->gsub = 0;
980 face->current_script = HB_ScriptCount;
981 face->current_flags = HB_ShaperFlag_Default;
982 face->has_opentype_kerning = false;
983 face->tmpAttributes = 0;
984 face->tmpLogClusters = 0;
985 face->glyphs_substituted = false;
986 face->buffer = 0;
994 if (!gdefStream || (error = HB_Load_GDEF_Table(gdefStream, &face->gdef))) {
996 face->gdef = 0;
1002 if (!stream || (error = HB_Load_GSUB_Table(stream, &face->gsub, face->gdef, gdefStream))) {
1003 face->gsub = 0;
1007 //DEBUG("face doesn't have a gsub table");
1014 if (!stream || (error = HB_Load_GPOS_Table(stream, &face->gpos, face->gdef, gdefStream))) {
1015 face->gpos = 0;
1023 face->supported_scripts[i] = checkScript(face, i);
1025 if (hb_buffer_new(&face->buffer) != HB_Err_Ok) {
1026 HB_FreeFace(face);
1030 return face;
1033 void HB_FreeFace(HB_Face face)
1035 if (!face)
1037 if (face->gpos)
1038 HB_Done_GPOS_Table(face->gpos);
1039 if (face->gsub)
1040 HB_Done_GSUB_Table(face->gsub);
1041 if (face->gdef)
1042 HB_Done_GDEF_Table(face->gdef);
1043 if (face->buffer)
1044 hb_buffer_free(face->buffer);
1045 if (face->tmpAttributes)
1046 free(face->tmpAttributes);
1047 if (face->tmpLogClusters)
1048 free(face->tmpLogClusters);
1049 free(face);
1056 if (!shaper_item->face->supported_scripts[script])
1059 HB_Face face = shaper_item->face;
1060 if (face->current_script == script && face->current_flags == shaper_item->shaperFlags)
1063 face->current_script = script;
1064 face->current_flags = shaper_item->shaperFlags;
1070 if (face->gsub && features) {
1073 HB_FeatureList featurelist = face->gsub->FeatureList;
1082 HB_GSUB_Clear_Features(face->gsub);
1084 HB_Error error = HB_GSUB_Select_Script(face->gsub, tag, &script_index);
1086 error = HB_GSUB_Select_Script(face->gsub, DefaultScript, &script_index);
1092 error = HB_GSUB_Select_Feature(face->gsub, features->tag, script_index, 0xffff, &feature_index);
1095 HB_GSUB_Add_Feature(face->gsub, feature_index, features->property);
1103 face->has_opentype_kerning = false;
1105 if (face->gpos) {
1106 HB_GPOS_Clear_Features(face->gpos);
1108 HB_Error error = HB_GPOS_Select_Script(face->gpos, tag, &script_index);
1110 error = HB_GPOS_Select_Script(face->gpos, DefaultScript, &script_index);
1115 HB_FeatureList featurelist = face->gpos->FeatureList;
1121 HB_GPOS_Select_Feature(face->gpos, r->FeatureTag, script_index, 0xffff, &feature_index);
1127 error = HB_GPOS_Query_Features(face->gpos, script_index, 0xffff, &feature_tag_list_buffer);
1133 if (face->current_flags & HB_ShaperFlag_NoKerning) {
1137 face->has_opentype_kerning = true;
1139 error = HB_GPOS_Select_Feature(face->gpos, *feature_tag_list, script_index, 0xffff, &feature_index);
1141 HB_GPOS_Add_Feature(face->gpos, feature_index, PositioningProperties);
1157 HB_Face face = item->face;
1159 face->length = item->num_glyphs;
1161 hb_buffer_clear(face->buffer);
1163 tmpAttributes = (HB_GlyphAttributes *) realloc(face->tmpAttributes, face->length*sizeof(HB_GlyphAttributes));
1166 face->tmpAttributes = tmpAttributes;
1168 tmpLogClusters = (unsigned int *) realloc(face->tmpLogClusters, face->length*sizeof(unsigned int));
1171 face->tmpLogClusters = tmpLogClusters;
1173 for (int i = 0; i < face->length; ++i) {
1174 hb_buffer_add_glyph(face->buffer, item->glyphs[i], properties ? properties[i] : 0, i);
1175 face->tmpAttributes[i] = item->attributes[i];
1176 face->tmpLogClusters[i] = item->log_clusters[i];
1190 face->glyphs_substituted = false;
1191 if (face->gsub) {
1192 unsigned int error = HB_GSUB_Apply_String(face->gsub, face->buffer);
1195 face->glyphs_substituted = (error != HB_Err_Not_Covered);
1214 HB_Face face = item->face;
1217 if (face->gpos) {
1218 if (face->buffer->positions)
1219 memset(face->buffer->positions, 0, face->buffer->in_length*sizeof(HB_PositionRec));
1221 glyphs_positioned = HB_GPOS_Apply_String(item->font, face->gpos, face->current_flags, face->buffer, false, false) != HB_Err_Not_Covered;
1224 if (!face->glyphs_substituted && !glyphs_positioned) {
1230 if (availableGlyphs < (int)face->buffer->in_length) {
1231 item->num_glyphs = face->buffer->in_length;
1238 for (unsigned int i = 0; i < face->buffer->in_length; ++i) {
1239 glyphs[i] = face->buffer->in_string[i].gindex;
1240 attributes[i] = face->tmpAttributes[face->buffer->in_string[i].cluster];
1241 if (i && face->buffer->in_string[i].cluster == face->buffer->in_string[i-1].cluster)
1244 item->num_glyphs = face->buffer->in_length;
1246 if (doLogClusters && face->glyphs_substituted) {
1253 for (unsigned int i = 0; i < face->buffer->in_length; ++i) {
1254 int ci = face->buffer->in_string[i].cluster;
1264 for (int j = oldCi; j < face->length; j++)
1274 HB_Position positions = face->buffer->positions;
1278 for (unsigned int i = 0; i < face->buffer->in_length; i++) {
1287 if (!(face->current_flags & HB_ShaperFlag_UseDesignMetrics))
1323 item->kerning_applied = face->has_opentype_kerning;