*** empty log message ***
[m17n/m17n-test.git] / flt-old.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <m17n-gui.h>
4 #include <ft2build.h>
5 #include FT_FREETYPE_H
6 #include <fontconfig/fontconfig.h>
7 #include <fontconfig/fcfreetype.h>
8
9 static FT_Library ft_library;
10
11 MFont *
12 open_font (MFrame *frame, char *fontname, char **err)
13 {
14   FcPattern *pat;
15   FcChar8 *fam, *file;
16   double pixelsize;
17   FcFontSet *fs;
18   FcObjectSet *os;
19   FT_Face face;
20
21   pat = FcNameParse ((FcChar8 *) fontname);
22   if (! pat)
23     {
24       *err = "invalid name format";
25       return NULL;
26     }
27   if (FcPatternGetString (pat, FC_FAMILY, 0, &fam) != FcResultMatch)
28     {
29       *err = "no family name";
30       return NULL;
31     }
32   if (FcPatternGetDouble (pat, FC_PIXEL_SIZE, 0, &pixelsize) != FcResultMatch)
33     pixelsize = 20;
34   FcPatternAddBool (pat, FC_SCALABLE, FcTrue);
35   FcPatternDel (pat, FC_PIXEL_SIZE);
36   os = FcObjectSetBuild (FC_FILE, NULL);
37   fs = FcFontList (NULL, pat, os);
38   if (fs->nfont == 0)
39     {
40       *err = "no matching font";
41       return NULL;
42     }
43   FcPatternGetString (fs->fonts[0], FC_FILE, 0, &file);
44
45   if (FT_New_Face (ft_library, (char *) file, 0, &face))
46     {
47       FcFontSetDestroy (fs);
48       FcObjectSetDestroy (os);
49       FcPatternDestroy (pat);
50       *err = "font open fail";
51       return NULL;
52     }
53   FcFontSetDestroy (fs);
54   FcObjectSetDestroy (os);
55   FcPatternDestroy (pat);
56   if (FT_Set_Pixel_Sizes (face, pixelsize, pixelsize))
57     {
58       *err = "set pixelsize fail";
59       FT_Done_Face (face);
60       return NULL;
61     }
62   return mfont_encapsulate (frame, Mfreetype, face);
63 }
64
65 int
66 main (int argc, char **argv)
67 {
68   char *err;
69   MText *mt;
70   MFrame *frame;
71   MFont *font;
72   int len;
73
74   if (argc < 2)
75     {
76       fprintf (stderr, "Usage: flt-old FONT-NAME < TEXT-FILE\n");
77       exit (1);
78     }
79
80   FT_Init_FreeType (&ft_library);
81   M17N_INIT ();
82   mt = mconv_decode_stream (msymbol ("utf-8"), stdin);
83   len = mtext_len (mt);
84   {
85     MFace *face = mface ();
86     MPlist *plist = mplist ();
87     MFontset *fontset = mfontset ("generic");
88
89     mface_put_prop (face, Mfontset, fontset);
90     mplist_add (plist, Mface, face);
91     mplist_add (plist, Mdevice, Mnil);
92     frame = mframe (plist);
93     m17n_object_unref (plist);
94     m17n_object_unref (face);
95     m17n_object_unref (fontset);
96   }
97   font = open_font (frame, argv[1], &err);
98   mtext_put_prop (mt, 0, len, Mfont, font);
99   if (! font)
100     {
101       fprintf (stderr, "Font error: %s: %s\n", argv[1], err);
102       exit (1);
103     }
104
105   mdraw_text_extents (frame, mt, 0, len, NULL, NULL, NULL, NULL);
106   m17n_object_unref (frame);
107   m17n_object_unref (mt);
108   M17N_FINI ();
109   return 0;
110 }