Add more prefix support in <dir> element
Added two prefix modes: "relative" that makes the relative path be relative to current file "cwd" for relative to current working directory which implies current behavior. Resolves: https://gitlab.freedesktop.org/fontconfig/fontconfig/issues/15
This commit is contained in:
parent
f0aae4455e
commit
1aa8b700c3
43
src/fcxml.c
43
src/fcxml.c
|
@ -2073,16 +2073,36 @@ FcParseDir (FcConfigParse *parse)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
attr = FcConfigGetAttribute (parse, "prefix");
|
attr = FcConfigGetAttribute (parse, "prefix");
|
||||||
if (attr && FcStrCmp (attr, (const FcChar8 *)"xdg") == 0)
|
|
||||||
{
|
|
||||||
prefix = FcConfigXdgDataHome ();
|
|
||||||
/* home directory might be disabled.
|
|
||||||
* simply ignore this element.
|
|
||||||
*/
|
|
||||||
if (!prefix)
|
|
||||||
goto bail;
|
|
||||||
}
|
|
||||||
data = FcStrBufDoneStatic (&parse->pstack->str);
|
data = FcStrBufDoneStatic (&parse->pstack->str);
|
||||||
|
if (attr)
|
||||||
|
{
|
||||||
|
if (FcStrCmp (attr, (const FcChar8 *)"xdg") == 0)
|
||||||
|
{
|
||||||
|
prefix = FcConfigXdgDataHome ();
|
||||||
|
/* home directory might be disabled.
|
||||||
|
* simply ignore this element.
|
||||||
|
*/
|
||||||
|
if (!prefix)
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
else if (FcStrCmp (attr, (const FcChar8 *)"cwd") == 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else if (FcStrCmp (attr, (const FcChar8 *)"relative") == 0)
|
||||||
|
{
|
||||||
|
prefix = FcStrDirname (parse->name);
|
||||||
|
if (!prefix)
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifndef _WIN32
|
||||||
|
/* For Win32, check this later for dealing with special cases */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!FcStrIsAbsoluteFilename (data) && data[0] != '~')
|
||||||
|
FcConfigMessage (parse, FcSevereWarning, "Use of ambiguous <dir> element. please add prefix=\"cwd\" if current behavior is desired.");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
FcConfigMessage (parse, FcSevereError, "out of memory");
|
FcConfigMessage (parse, FcSevereError, "out of memory");
|
||||||
|
@ -2153,6 +2173,11 @@ FcParseDir (FcConfigParse *parse)
|
||||||
strcat ((char *) data, "\\");
|
strcat ((char *) data, "\\");
|
||||||
strcat ((char *) data, "fonts");
|
strcat ((char *) data, "fonts");
|
||||||
}
|
}
|
||||||
|
else if (!attr)
|
||||||
|
{
|
||||||
|
if (!FcStrIsAbsoluteFilename (data) && data[0] != '~')
|
||||||
|
FcConfigMessage (parse, FcSevereWarning, "Use of ambiguous <dir> element. please add prefix=\"cwd\" if current behavior is desired.");
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (strlen ((char *) data) == 0)
|
if (strlen ((char *) data) == 0)
|
||||||
FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored");
|
FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored");
|
||||||
|
|
Loading…
Reference in New Issue