11 printf ("Usage: findfont [FONT-SPEC]\n");
12 printf ("FONT-SPEC::=[FAMILY][:script=SCRIPT][:lang=LANG][:otf=OTFSPEC]\n");
17 make_symbol (char *str, int len)
19 char *p = alloca (len + 1);
27 parse_font_name (char *str)
29 MFont *font = mfont ();
34 for (p = str + 1; *p && *p != ':'; p++);
35 mfont_put_prop (font, Mfamily, make_symbol (str, p - str));
41 if (strncmp (str, "script=", 7) == 0)
44 for (p = str; *p && *p != ':'; p++);
45 mfont_put_prop (font, Mscript, make_symbol (str, p - str));
47 else if (strncmp (str, "lang=", 5) == 0)
50 for (p = str; *p && *p != ':'; p++);
51 mfont_put_prop (font, Mlanguage, make_symbol (str, p - str));
53 else if (strncmp (str, "otf=", 4) == 0)
56 for (p = str; *p && *p != ':'; p++);
57 mfont_put_prop (font, msymbol ("otf"), make_symbol (str, p - str));
61 for (p = str; *p && *p != ':'; p++);
62 fprintf (stderr, "Unknown option ignored: %s\n",
63 msymbol_name (make_symbol (str, p - str)));
71 print_font (MFont *font)
73 MSymbol family, foundry, weight, slant, stretch;
74 char *weight_name, *slant_name, *stretch_name;
75 char style_name[1024];
77 family = mfont_get_prop (font, Mfamily);
78 foundry = mfont_get_prop (font, Mfoundry);
79 weight = mfont_get_prop (font, Mweight);
80 weight_name = weight ? msymbol_name (weight) : "";
81 slant = mfont_get_prop (font, Mstyle);
82 slant_name = slant ? msymbol_name (slant) : "";
83 stretch = mfont_get_prop (font, Mstretch);
84 stretch_name = stretch ? msymbol_name (stretch) : "";
86 sprintf (style_name, "%s-%s-%s", weight_name, slant_name, stretch_name);
87 printf ("%s:foundry=%s:style=%s\n",
88 msymbol_name (family), msymbol_name (foundry), style_name);
92 main (int argc, char **argv)
100 mplist_add (plist, Mdevice, Mnil);
101 frame = mframe (plist);
102 m17n_object_unref (plist);
106 printf ("Listing all available family names...\n");
107 plist = mfont_list_family_names (frame);
109 for (p = plist; p && mplist_key (p) != Mnil; p = mplist_next (p))
110 printf ("%s\n", msymbol_name ((MSymbol) mplist_value (p)));
114 MFont *font = parse_font_name (argv[1]);
116 plist = mfont_list (frame, font, Mnil, 0);
118 /* List up unique pairs of family and foundry of fonts in PL. */
119 for (p = plist; p && mplist_key (p) != Mnil; p = mplist_next (p))
120 print_font (mplist_value (p));
126 m17n_object_unref (plist);
127 m17n_object_unref (frame);