]> git.wh0rd.org - fontconfig.git/commitdiff
Add fc-match program
authorKeith Packard <keithp@keithp.com>
Mon, 9 Jun 2003 16:53:31 +0000 (16:53 +0000)
committerKeith Packard <keithp@keithp.com>
Mon, 9 Jun 2003 16:53:31 +0000 (16:53 +0000)
fc-match/Makefile.am [new file with mode: 0644]
fc-match/fc-match.1 [new file with mode: 0644]
fc-match/fc-match.c [new file with mode: 0644]

diff --git a/fc-match/Makefile.am b/fc-match/Makefile.am
new file mode 100644 (file)
index 0000000..8c8b119
--- /dev/null
@@ -0,0 +1,32 @@
+# 
+#  $Id$
+# 
+#  Copyright © 2003 Keith Packard
+# 
+#  Permission to use, copy, modify, distribute, and sell this software and its
+#  documentation for any purpose is hereby granted without fee, provided that
+#  the above copyright notice appear in all copies and that both that
+#  copyright notice and this permission notice appear in supporting
+#  documentation, and that the name of Keith Packard not be used in
+#  advertising or publicity pertaining to distribution of the software without
+#  specific, written prior permission.  Keith Packard makes no
+#  representations about the suitability of this software for any purpose.  It
+#  is provided "as is" without express or implied warranty.
+# 
+#  KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+#  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+#  EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+#  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+#  DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+#  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+#  PERFORMANCE OF THIS SOFTWARE.
+
+bin_PROGRAMS=fc-match
+
+man_MANS=fc-match.1
+
+INCLUDES=$(FREETYPE_CFLAGS)
+
+EXTRA_DIST=$(man_MANS)
+
+fc_match_LDADD = ../src/libfontconfig.la
diff --git a/fc-match/fc-match.1 b/fc-match/fc-match.1
new file mode 100644 (file)
index 0000000..4c37477
--- /dev/null
@@ -0,0 +1,39 @@
+.\"
+.\" Copyright © 2003 Keith Packard
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this software and its
+.\" documentation for any purpose is hereby granted without fee, provided that
+.\" the above copyright notice appear in all copies and that both that
+.\" copyright notice and this permission notice appear in supporting
+.\" documentation, and that the name of Keith Packard not be used in
+.\" advertising or publicity pertaining to distribution of the software without
+.\" specific, written prior permission.  Keith Packard makes no
+.\" representations about the suitability of this software for any purpose.  It
+.\" is provided "as is" without express or implied warranty.
+.\"
+.\" KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+.\" EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+.\" PERFORMANCE OF THIS SOFTWARE.
+.\"
+.\"
+.\" $RCSId: xc/programs/fc-match/fc-match.man,v 1.3 2001/02/09 03:47:56 tsi Exp $
+.\"
+.TH FC-MATCH 1 __vendorversion__
+.SH NAME
+fc-match \- match available fonts
+.SH SYNOPSIS
+.B "fc-match"
+.RI [-svV?] [--sort] [--verbose] [--version] [ font-pattern ]
+.SH DESCRIPTION
+.I fc-match
+matches font-pattern (empty pattern by default) using the normal fontconfig
+matching rules to find the best font available.  If --sort is given, the
+sorted list of best matching fonts is displayed.  With --verbose, the whole
+font pattern for each match is printed, otherwise only the file, family and
+style are printed.
+.SH "SEE ALSO"
+fontconfig(3)
diff --git a/fc-match/fc-match.c b/fc-match/fc-match.c
new file mode 100644 (file)
index 0000000..498018b
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * $RCSId: xc/lib/fontconfig/fc-list/fc-list.c,v 1.5 2002/06/30 23:45:40 keithp Exp $
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Keith Packard makes no
+ * representations about the suitability of this software for any purpose.  It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <fontconfig/fontconfig.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#else
+#ifdef linux
+#define HAVE_GETOPT_LONG 1
+#endif
+#define HAVE_GETOPT 1
+#endif
+
+#ifndef HAVE_GETOPT
+#define HAVE_GETOPT 0
+#endif
+#ifndef HAVE_GETOPT_LONG
+#define HAVE_GETOPT_LONG 0
+#endif
+
+#if HAVE_GETOPT_LONG
+#undef  _GNU_SOURCE
+#define _GNU_SOURCE
+#include <getopt.h>
+const struct option longopts[] = {
+    {"sort", 0, 0, 's'},
+    {"version", 0, 0, 'V'},
+    {"verbose", 0, 0, 'v'},
+    {"help", 0, 0, '?'},
+    {NULL,0,0,0},
+};
+#else
+#if HAVE_GETOPT
+extern char *optarg;
+extern int optind, opterr, optopt;
+#endif
+#endif
+
+static void usage (char *program)
+{
+#if HAVE_GETOPT_LONG
+    fprintf (stderr, "usage: %s [-svV?] [--sort] [--verbose] [--version] [--help] [pattern]\n",
+            program);
+#else
+    fprintf (stderr, "usage: %s [-svV?] [pattern]\n",
+            program);
+#endif
+    fprintf (stderr, "List fonts matching [pattern]\n");
+    fprintf (stderr, "\n");
+#if HAVE_GETOPT_LONG
+    fprintf (stderr, "  -s, --sort           display sorted list of matches\n");
+    fprintf (stderr, "  -v, --verbose        display entire font pattern\n");
+    fprintf (stderr, "  -V, --version        display font config version and exit\n");
+    fprintf (stderr, "  -?, --help           display this help and exit\n");
+#else
+    fprintf (stderr, "  -s,        (sort)    display sorted list of matches\n");
+    fprintf (stderr, "  -v         (verbose) display entire font pattern\n");
+    fprintf (stderr, "  -V         (version) display font config version and exit\n");
+    fprintf (stderr, "  -?         (help)    display this help and exit\n");
+#endif
+    exit (1);
+}
+
+int
+main (int argc, char **argv)
+{
+    int                verbose = 0;
+    int                sort = 0;
+    int                i;
+    FcObjectSet *os = 0;
+    FcFontSet  *fs;
+    FcPattern   *pat;
+    FcResult   result;
+#if HAVE_GETOPT_LONG || HAVE_GETOPT
+    int                c;
+
+#if HAVE_GETOPT_LONG
+    while ((c = getopt_long (argc, argv, "Vv?", longopts, NULL)) != -1)
+#else
+    while ((c = getopt (argc, argv, "sVv?")) != -1)
+#endif
+    {
+       switch (c) {
+       case 's':
+           sort = 1;
+           break;
+       case 'V':
+           fprintf (stderr, "fontconfig version %d.%d.%d\n", 
+                    FC_MAJOR, FC_MINOR, FC_REVISION);
+           exit (0);
+       case 'v':
+           verbose = 1;
+           break;
+       default:
+           usage (argv[0]);
+       }
+    }
+    i = optind;
+#else
+    i = 1;
+#endif
+
+    if (!FcInit ())
+    {
+       fprintf (stderr, "Can't init font config library\n");
+       return 1;
+    }
+    if (argv[i])
+       pat = FcNameParse ((FcChar8 *) argv[i]);
+    else
+       pat = FcPatternCreate ();
+
+    FcConfigSubstitute (0, pat, FcMatchPattern);
+    FcDefaultSubstitute (pat);
+    
+    if (sort)
+       fs = FcFontSort (0, pat, FcTrue, 0, &result);
+    else
+    {
+       FcPattern   *match;
+       fs = FcFontSetCreate ();
+       match = FcFontMatch (0, pat, &result);
+       if (match)
+           FcFontSetAdd (fs, match);
+    }
+    if (pat)
+       FcPatternDestroy (pat);
+
+    if (fs)
+    {
+       int     j;
+
+       for (j = 0; j < fs->nfont; j++)
+       {
+           if (verbose)
+           {
+               FcPatternPrint (fs->fonts[j]);
+           }
+           else
+           {
+               FcChar8 *family;
+               FcChar8 *style;
+               FcChar8 *file;
+
+               if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &file) != FcResultMatch)
+                   file = "<unknown filename>";
+               else
+               {
+                   FcChar8 *slash = strrchr (file, '/');
+                   if (slash)
+                       file = slash+1;
+               }
+               if (FcPatternGetString (fs->fonts[j], FC_FAMILY, 0, &family) != FcResultMatch)
+                   family = "<unknown family>";
+               if (FcPatternGetString (fs->fonts[j], FC_STYLE, 0, &style) != FcResultMatch)
+                   file = "<unknown style>";
+
+               printf ("%s: \"%s\" \"%s\"\n", file, family, style);
+           }
+       }
+       FcFontSetDestroy (fs);
+    }
+    return 0;
+}