document font stuff for translators and make it a bit more powerful

This commit is contained in:
Albert Cahalan 2006-02-15 08:42:52 +00:00
parent 2f29e8aef1
commit 3908b5c886

View file

@ -6943,7 +6943,26 @@ static void loadfont_callback(const char *restrict const dir, unsigned dirlen, t
printf("Found %d faces in %s, %s, %s\n", numfaces, files[i].str, family, style); printf("Found %d faces in %s, %s, %s\n", numfaces, files[i].str, family, style);
#endif #endif
if(strcmp("Zapfino",family) && strcmp("Elvish Ring NFI",family) && charset_works(font, gettext("jq")) && charset_works(font, gettext("JQ"))) // First, the blacklist. We list font families that can crash Tux Paint
// via bugs in the SDL_ttf library. We also test fonts to be sure that
// they have both uppercase and lowercase letters. Note that we do not
// test for "Aa", because it is OK if uppercase and lowercase are the
// same. (but not nice -- such fonts get a low score later)
//
// We test the alphabet twice, to help with translation. If the users
// will be unable to type ASCII letters, then both lines should be
// translated. Otherwise, only Line X should be translated and the
// ASCII-only fonts should be given bad scores in the scoring code below.
if
(
strcmp("Zapfino",family) && strcmp("Elvish Ring NFI",family)
&&
(
(charset_works(font, gettext("qx")) && charset_works(font, gettext("QX"))) // Line X
||
(charset_works(font, gettext("qy")) && charset_works(font, gettext("QY"))) // Line Y
)
)
{ {
if (num_font_styles==num_font_styles_max) if (num_font_styles==num_font_styles_max)
{ {
@ -6955,14 +6974,18 @@ static void loadfont_callback(const char *restrict const dir, unsigned dirlen, t
user_font_styles[num_font_styles]->filename = files[i].str; // steal it (mark NULL below) user_font_styles[num_font_styles]->filename = files[i].str; // steal it (mark NULL below)
user_font_styles[num_font_styles]->family = strdup(family); user_font_styles[num_font_styles]->family = strdup(family);
user_font_styles[num_font_styles]->style = strdup(style); user_font_styles[num_font_styles]->style = strdup(style);
user_font_styles[num_font_styles]->score = charset_works(font, gettext("oO")); // Now we score fonts to ensure that the best ones will be placed at
user_font_styles[num_font_styles]->score += charset_works(font, gettext("`\%_@$~#{}<>^&*")); // the top of the list. The user will see them first. This sorting is
user_font_styles[num_font_styles]->score += charset_works(font, gettext(",.?!")); // especially important for users who have scroll buttons disabled.
user_font_styles[num_font_styles]->score += charset_works(font, gettext("017")); // Translators should do whatever is needed to put crummy fonts last.
user_font_styles[num_font_styles]->score += charset_works(font, gettext("O0")); user_font_styles[num_font_styles]->score = charset_works(font, gettext("oO")); // distinct uppercase and lowercase
user_font_styles[num_font_styles]->score += charset_works(font, gettext("1Il|")); user_font_styles[num_font_styles]->score += charset_works(font, gettext("`\%_@$~#{}<>^&*")); // uncommon punctuation
user_font_styles[num_font_styles]->score += charset_works(font, gettext(",.?!")); // common punctuation
user_font_styles[num_font_styles]->score += charset_works(font, gettext("017")); // digits
user_font_styles[num_font_styles]->score += charset_works(font, gettext("O0")); // distinct circle-like characters
user_font_styles[num_font_styles]->score += charset_works(font, gettext("1Il|")); // distinct line-like characters
num_font_styles++; num_font_styles++;
//printf("Accepted: %s, %s, %s\n", files[i].str, family, style); //printf("Accepted: %s, %s, %s, score(%d)\n", files[i].str, family, style, user_font_styles[num_font_styles]->score);
files[i].str = NULL; // so free() won't crash -- we stole the memory files[i].str = NULL; // so free() won't crash -- we stole the memory
} }
else else