]> git.wh0rd.org - fontconfig.git/blobdiff - fc-list/fc-list.c
Bug 44826 - <alias> must contain only a single <family>
[fontconfig.git] / fc-list / fc-list.c
index 89f4167b5fc44e6173cbc694bbf4ec6811b02320..ad383328e2d1f3a1d5cd8fcd9b98054b08f1d784 100644 (file)
@@ -7,15 +7,15 @@
  * 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
+ * documentation, and that the name of the author(s) not be used in
  * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
+ * specific, written prior permission.  The authors make 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,
+ * THE AUTHOR(S) 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
+ * EVENT SHALL THE AUTHOR(S) 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
@@ -26,6 +26,7 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <stdlib.h>
+#include <string.h>
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #else
 #define _GNU_SOURCE
 #include <getopt.h>
 const struct option longopts[] = {
-    {"version", 0, 0, 'V'},
     {"verbose", 0, 0, 'v'},
+    {"format", 1, 0, 'f'},
     {"quiet", 0, 0, 'q'},
+    {"version", 0, 0, 'V'},
     {"help", 0, 0, 'h'},
     {NULL,0,0,0},
 };
@@ -65,21 +67,23 @@ usage (char *program, int error)
 {
     FILE *file = error ? stderr : stdout;
 #if HAVE_GETOPT_LONG
-    fprintf (file, "usage: %s [-vqVh] [--verbose] [--quiet] [--version] [--help] [pattern] {element ...} \n",
+    fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [--verbose] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n",
             program);
 #else
-    fprintf (file, "usage: %s [-vqVh] [pattern] {element ...} \n",
+    fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [pattern] {element ...} \n",
             program);
 #endif
     fprintf (file, "List fonts matching [pattern]\n");
     fprintf (file, "\n");
 #if HAVE_GETOPT_LONG
-    fprintf (file, "  -v, --verbose        display entire font pattern\n");
+    fprintf (file, "  -v, --verbose        display entire font pattern verbosely\n");
+    fprintf (file, "  -f, --format=FORMAT  use the given output format\n");
     fprintf (file, "  -q, --quiet          suppress all normal output, exit 1 if no fonts matched\n");
     fprintf (file, "  -V, --version        display font config version and exit\n");
     fprintf (file, "  -h, --help           display this help and exit\n");
 #else
-    fprintf (file, "  -v         (verbose) display entire font pattern\n");
+    fprintf (file, "  -v         (verbose) display entire font pattern verbosely\n");
+    fprintf (file, "  -f FORMAT  (format)  use the given output format\n");
     fprintf (file, "  -q,        (quiet)   suppress all normal output, exit 1 if no fonts matched\n");
     fprintf (file, "  -V         (version) display font config version and exit\n");
     fprintf (file, "  -h         (help)    display this help and exit\n");
@@ -92,6 +96,7 @@ main (int argc, char **argv)
 {
     int                verbose = 0;
     int                quiet = 0;
+    FcChar8     *format = NULL;
     int                nfont = 0;
     int                i;
     FcObjectSet *os = 0;
@@ -101,22 +106,25 @@ main (int argc, char **argv)
     int                c;
 
 #if HAVE_GETOPT_LONG
-    while ((c = getopt_long (argc, argv, "Vqvh", longopts, NULL)) != -1)
+    while ((c = getopt_long (argc, argv, "vf:qVh", longopts, NULL)) != -1)
 #else
-    while ((c = getopt (argc, argv, "Vqvh")) != -1)
+    while ((c = getopt (argc, argv, "vf:qVh")) != -1)
 #endif
     {
        switch (c) {
-       case 'V':
-           fprintf (stderr, "fontconfig version %d.%d.%d\n", 
-                    FC_MAJOR, FC_MINOR, FC_REVISION);
-           exit (0);
        case 'v':
            verbose = 1;
            break;
+       case 'f':
+           format = (FcChar8 *) strdup (optarg);
+           break;
        case 'q':
            quiet = 1;
            break;
+       case 'V':
+           fprintf (stderr, "fontconfig version %d.%d.%d\n",
+                    FC_MAJOR, FC_MINOR, FC_REVISION);
+           exit (0);
        case 'h':
            usage (argv[0], 0);
        default:
@@ -136,20 +144,21 @@ main (int argc, char **argv)
     if (argv[i])
     {
        pat = FcNameParse ((FcChar8 *) argv[i]);
-       if (!verbose)
-           while (argv[++i])
-           {
-               if (!os)
-                   os = FcObjectSetCreate ();
-               FcObjectSetAdd (os, argv[i]);
-           }
+       while (argv[++i])
+       {
+           if (!os)
+               os = FcObjectSetCreate ();
+           FcObjectSetAdd (os, argv[i]);
+       }
     }
     else
        pat = FcPatternCreate ();
     if (quiet && !os)
        os = FcObjectSetCreate ();
-    if (!verbose && !os)
-       os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, (char *) 0);
+    if (!verbose && !format && !os)
+       os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, (char *) 0);
+    if (!format)
+        format = "%{=fclist}\n";
     fs = FcFontList (0, pat, os);
     if (os)
        FcObjectSetDestroy (os);
@@ -162,18 +171,20 @@ main (int argc, char **argv)
 
        for (j = 0; j < fs->nfont; j++)
        {
-           FcChar8 *font;
-           FcChar8 *file;
-
            if (verbose)
+           {
                FcPatternPrint (fs->fonts[j]);
+           }
            else
            {
-               font = FcNameUnparse (fs->fonts[j]);
-               if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch)
-                   printf ("%s: ", file);
-               printf ("%s\n", font);
-               free (font);
+               FcChar8 *s;
+
+               s = FcPatternFormat (fs->fonts[j], format);
+               if (s)
+               {
+                   printf ("%s", s);
+                   free (s);
+               }
            }
        }
     }