]> git.wh0rd.org - fontconfig.git/commitdiff
[fcformat] Start adding builtins
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 10 Feb 2009 11:22:55 +0000 (06:22 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Sun, 15 Feb 2009 21:40:29 +0000 (13:40 -0800)
src/fcformat.c

index 971ee083e0272e89f550087f7d9c49531fcd6974..1d67a9ddfc9513329b7232f2730262c3f97a54ef 100644 (file)
@@ -33,7 +33,7 @@
  *
  * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}'
  * - allow indexing simple tags using '%{elt[idx]}'
- * - conditional/filtering/deletion on binding (using '(w)'/'(s)' notation)
+ * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation)
  */
 
 static void
@@ -203,6 +203,30 @@ read_chars (FcFormatContext *c,
     return FcTrue;
 }
 
+static FcBool
+interpret_builtin (FcFormatContext *c,
+                  FcPattern       *pat,
+                  FcStrBuf        *buf)
+{
+    if (!expect_char (c, '='))
+       return FcFalse;
+
+    if (!read_word (c))
+       return FcFalse;
+#define BUILTIN(name, func) \
+    else if (0 == strcmp ((const char *) c->word, name))\
+       return func (c, pat, buf)
+    BUILTIN  ("unparse",  FcNameUnparse);
+    BUILTIN  ("verbose",  FcPatternPrint);
+    BUILTIN2 ("fcmatch",  FcStrDirname);
+    BUILTIN2 ("fclist",   FcStrDirname);
+    BUILTIN2 ("pkgkit",   FcStrDirname);
+
+    message ("unknown builtin \"%s\"",
+            c->word);
+    return FcFalse;
+}
+
 static FcBool
 interpret_expr (FcFormatContext *c,
                FcPattern       *pat,
@@ -805,6 +829,7 @@ interpret_percent (FcFormatContext *c,
     start = buf->len;
 
     switch (*c->format) {
+    case '=': ret = interpret_builtin (c, pat, buf); break;
     case '{': ret = interpret_subexpr (c, pat, buf); break;
     case '+': ret = interpret_filter  (c, pat, buf); break;
     case '-': ret = interpret_delete  (c, pat, buf); break;