summaryrefslogtreecommitdiff
path: root/pango/pangoft2.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pangoft2.c')
-rw-r--r--pango/pangoft2.c85
1 files changed, 5 insertions, 80 deletions
diff --git a/pango/pangoft2.c b/pango/pangoft2.c
index 8cdf7fb1..99bd1376 100644
--- a/pango/pangoft2.c
+++ b/pango/pangoft2.c
@@ -48,7 +48,7 @@ typedef struct _PangoFT2ContextInfo PangoFT2ContextInfo;
struct _PangoFT2MetricsInfo
{
- PangoLanguage *language;
+ const char *sample_str;
PangoFontMetrics metrics;
};
@@ -622,52 +622,6 @@ get_font_metrics_from_string (PangoFont *font,
g_free (embedding_levels);
}
-typedef struct {
- const char *lang;
- const char *str;
-} LangInfo;
-
-int
-lang_info_compare (const void *key,
- const void *val)
-{
- const LangInfo *lang_info = val;
-
- return strncmp (key, lang_info->lang, 2);
-}
-
-/* The following array is supposed to contain enough text to tickle all necessary fonts for each
- * of the languages in the following. Yes, it's pretty lame. Not all of the languages
- * in the following have sufficient text to excercise all the accents for the language, and
- * there are obviously many more languages to include as well.
- */
-LangInfo lang_texts[] = {
- { "ar", "Arabic ا,DXXم عY(JY,CY(B" },
- { "cs", "Czech (česky) Dobrý den" },
- { "da", "Danish (Dansk) Hej, Goddag" },
- { "el", "Greek ($(GN;ληνικά(B) $(CN5ιά ,CNς(B" },
- { "en", "English Hello" },
- { "eo", "Esperanto Saluton" },
- { "es", "Spanish (Español) ¡Hola!" },
- { "et", "Estonian Tere, Tervist" },
- { "fi", "Finnish (Suomi) Hei, Hyvää päivää" },
- { "fr", "French (Français)" },
- { "de", "German Grüß Gott" },
- { "iw", "Hebrew שלום" },
- { "il", "Italiano Ciao, Buon giorno" },
- { "ja", "Japanese (日語) こん, コン,Foハ(B" },
- { "ko", "Korean (한글) ,Hk하,D8요(B, ,Hk하십j(B" },
- { "mt", "Maltese Ċaw, Saħħa" },
- { "nl", "Nederlands, Vlaams Hallo, Dag" },
- { "no", "Norwegian (Norsk) Hei, God dag" },
- { "pl", "Polish Dzień dobry, Hej" },
- { "ru", "Russian (Р,CQкий(B)" },
- { "sk", "Slovak Dobrý deň" },
- { "sv", "Swedish (Svenska) Hej på dej, Goddag" },
- { "tr", "Turkish (Türkçe) Merhaba" },
- { "zh", "Chinese (中文,$(1.i话(B,(Ih(B)" }
-};
-
static void
pango_ft2_font_get_metrics (PangoFont *font,
PangoLanguage *language,
@@ -677,43 +631,14 @@ pango_ft2_font_get_metrics (PangoFont *font,
PangoFT2Font *ft2font = (PangoFT2Font *)font;
GSList *tmp_list;
- PangoLanguage *lookup_lang;
- const char *str;
-
- if (language)
- {
- const char *lang_str = pango_language_to_string (language);
-
- LangInfo *lang_info = bsearch (lang_str, lang_texts,
- G_N_ELEMENTS (lang_texts), sizeof (LangInfo),
- lang_info_compare);
-
- if (lang_info)
- {
- lookup_lang = pango_language_from_string (lang_info->lang);
- str = lang_info->str;
- }
- else
- {
- lookup_lang = pango_language_from_string ("UNKNOWN");
- str = "French (Français)"; /* Assume iso-8859-1 */
- }
- }
- else
- {
- lookup_lang = pango_language_from_string ("NONE");
-
- /* Complete junk
- */
- str = "ا,DXXم عY(JY,CY č(Besky $(GN;ληνικά (BFrançais 日語 한글 Р,CQкий 中文(B,$(1.i话(B,(Ih (BTürkçe";
- }
+ const char *sample_str = pango_language_get_sample_string (language);
tmp_list = ft2font->metrics_by_lang;
while (tmp_list)
{
info = tmp_list->data;
- if (info->language == lookup_lang) /* We _don't_ need strcmp */
+ if (info->sample_str == sample_str) /* We _don't_ need strcmp */
break;
tmp_list = tmp_list->next;
@@ -722,11 +647,11 @@ pango_ft2_font_get_metrics (PangoFont *font,
if (!tmp_list)
{
info = g_new (PangoFT2MetricsInfo, 1);
- info->language = lookup_lang;
+ info->sample_str = sample_str;
ft2font->metrics_by_lang = g_slist_prepend (ft2font->metrics_by_lang, info);
- get_font_metrics_from_string (font, language, str, &info->metrics);
+ get_font_metrics_from_string (font, language, sample_str, &info->metrics);
}
*metrics = info->metrics;