mirror of
https://github.com/tesseract-ocr/tesseract.git
synced 2024-12-13 07:59:04 +08:00
test for synthesized font faces.
This commit is contained in:
parent
f9d1bda7e3
commit
4a5ec186f6
@ -485,6 +485,10 @@ std::vector<std::string> FontUtils::available_fonts_; // cache list
|
|||||||
// Until then, we are restricted to using a hack where we try to load the font
|
// Until then, we are restricted to using a hack where we try to load the font
|
||||||
// from the font_map, and then check what we loaded to see if it has the
|
// from the font_map, and then check what we loaded to see if it has the
|
||||||
// description we expected. If it is not, then the font is deemed unavailable.
|
// description we expected. If it is not, then the font is deemed unavailable.
|
||||||
|
//
|
||||||
|
// TODO: This function reports also some not synthesized fonts as not available
|
||||||
|
// e.g. 'Bitstream Charter Medium Italic', 'LMRoman17', so we need this hack
|
||||||
|
// until other solution is found.
|
||||||
/* static */
|
/* static */
|
||||||
bool FontUtils::IsAvailableFont(const char* input_query_desc,
|
bool FontUtils::IsAvailableFont(const char* input_query_desc,
|
||||||
std::string* best_match) {
|
std::string* best_match) {
|
||||||
@ -505,6 +509,7 @@ bool FontUtils::IsAvailableFont(const char* input_query_desc,
|
|||||||
}
|
}
|
||||||
if (selected_font == nullptr) {
|
if (selected_font == nullptr) {
|
||||||
pango_font_description_free(desc);
|
pango_font_description_free(desc);
|
||||||
|
tlog(4, "** Font '%s' failed to load from font map!\n", input_query_desc);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PangoFontDescription* selected_desc = pango_font_describe(selected_font);
|
PangoFontDescription* selected_desc = pango_font_describe(selected_font);
|
||||||
@ -531,6 +536,9 @@ bool FontUtils::IsAvailableFont(const char* input_query_desc,
|
|||||||
pango_font_description_free(selected_desc);
|
pango_font_description_free(selected_desc);
|
||||||
g_object_unref(selected_font);
|
g_object_unref(selected_font);
|
||||||
pango_font_description_free(desc);
|
pango_font_description_free(desc);
|
||||||
|
if (!equal)
|
||||||
|
tlog(4, "** Font '%s' failed pango_font_description_equal!\n",
|
||||||
|
input_query_desc);
|
||||||
return equal;
|
return equal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -581,7 +589,9 @@ const std::vector<std::string>& FontUtils::ListAvailableFonts() {
|
|||||||
for (int j = 0; j < n_faces; ++j) {
|
for (int j = 0; j < n_faces; ++j) {
|
||||||
PangoFontDescription* desc = pango_font_face_describe(faces[j]);
|
PangoFontDescription* desc = pango_font_face_describe(faces[j]);
|
||||||
char* desc_str = pango_font_description_to_string(desc);
|
char* desc_str = pango_font_description_to_string(desc);
|
||||||
if (IsAvailableFont(desc_str)) {
|
// "synthesized" font faces that are not truly loadable, so we skip it
|
||||||
|
if (!pango_font_face_is_synthesized(faces[j])
|
||||||
|
&& IsAvailableFont(desc_str)) {
|
||||||
available_fonts_.push_back(desc_str);
|
available_fonts_.push_back(desc_str);
|
||||||
}
|
}
|
||||||
pango_font_description_free(desc);
|
pango_font_description_free(desc);
|
||||||
|
Loading…
Reference in New Issue
Block a user