X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffcformat.c;h=c4ac06c9a8a861261755e4074ee2972fc902a900;hb=621f3113124ec3b204cd2fa93c859e5ba749a916;hp=bf9401740d4b946efa1d4f1293763875a9b60d2d;hpb=caeea376da54a6337bfcb1bb20f50c8c2302458f;p=fontconfig.git diff --git a/src/fcformat.c b/src/fcformat.c index bf94017..c4ac06c 100644 --- a/src/fcformat.c +++ b/src/fcformat.c @@ -7,9 +7,9 @@ * 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. * @@ -62,6 +62,7 @@ * unparse FcNameUnparse * fcmatch fc-match default * fclist fc-list default + * fccat fc-cat default * pkgkit PackageKit package tag format * * @@ -69,12 +70,14 @@ * * - verbose builtin that is like FcPatternPrint * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}' + * - allow indexing in +, -, ? filtering? * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation) */ +#define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\"" #define FCMATCH_FORMAT "%{file:-|basename}: \"%{family[0]:-}\" \"%{style[0]:-}\"" -#define FCLIST_FORMAT "%{?file{%{file}: }}%{=unparse}" +#define FCLIST_FORMAT "%{?file{%{file}: }}%{-file{%{=unparse}}}" #define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}" @@ -303,6 +306,7 @@ interpret_builtin (FcFormatContext *c, #define BUILTIN(name, format) \ else if (0 == strcmp ((const char *) c->word, name))\ ret = FcPatternFormatToBuf (pat, (const FcChar8 *) format, buf) + BUILTIN ("fccat", FCCAT_FORMAT); BUILTIN ("fcmatch", FCMATCH_FORMAT); BUILTIN ("fclist", FCLIST_FORMAT); BUILTIN ("pkgkit", PKGKIT_FORMAT); @@ -349,13 +353,11 @@ skip_subexpr (FcFormatContext *c); static FcBool skip_percent (FcFormatContext *c) { - int width; - if (!expect_char (c, '%')) return FcFalse; /* skip an optional width specifier */ - width = strtol ((const char *) c->format, (char **) &c->format, 10); + strtol ((const char *) c->format, (char **) &c->format, 10); if (!expect_char (c, '{')) return FcFalse; @@ -436,6 +438,7 @@ interpret_filter_in (FcFormatContext *c, do { + /* XXX binding */ if (!read_word (c) || !FcObjectSetAdd (os, (const char *) c->word)) { @@ -608,7 +611,7 @@ interpret_enumerate (FcFormatContext *c, { FcLangSet *langset; if (FcResultMatch == - FcPatternGetLangSet (pat, os->objects[0], idx, &langset)) + FcPatternGetLangSet (pat, os->objects[0], 0, &langset)) { FcStrSet *ss; if (!(ss = FcLangSetGetLangs (langset)) || @@ -636,6 +639,7 @@ interpret_enumerate (FcFormatContext *c, FcPatternDel (subpat, os->objects[0]); if ((lang = FcStrListNext (lang_strs))) { + /* XXX binding? */ FcPatternAddString (subpat, os->objects[0], lang); done = FcFalse; } @@ -654,6 +658,7 @@ interpret_enumerate (FcFormatContext *c, if (FcResultMatch == FcPatternGet (pat, os->objects[i], idx, &v)) { + /* XXX binding */ FcPatternAdd (subpat, os->objects[i], v, FcFalse); done = FcFalse; } @@ -728,7 +733,7 @@ interpret_simple (FcFormatContext *c, c->word = c->word + strlen ((const char *) c->word) + 1; /* for now we just support 'default value' */ if (!expect_char (c, '-') || - !read_chars (c, '\0')) + !read_chars (c, '|')) { c->word = orig; return FcFalse; @@ -788,6 +793,8 @@ cescape (FcFormatContext *c, const FcChar8 *str, FcStrBuf *buf) { + /* XXX escape \n etc? */ + while(*str) { switch (*str) @@ -825,6 +832,8 @@ xmlescape (FcFormatContext *c, const FcChar8 *str, FcStrBuf *buf) { + /* XXX escape \n etc? */ + while(*str) { switch (*str)