xftname.c revision 2836776b
1c76ae52dSmrg/*
2c76ae52dSmrg * Copyright © 2000 Keith Packard
3c76ae52dSmrg *
4c76ae52dSmrg * Permission to use, copy, modify, distribute, and sell this software and its
5c76ae52dSmrg * documentation for any purpose is hereby granted without fee, provided that
6c76ae52dSmrg * the above copyright notice appear in all copies and that both that
7c76ae52dSmrg * copyright notice and this permission notice appear in supporting
8c76ae52dSmrg * documentation, and that the name of Keith Packard not be used in
9c76ae52dSmrg * advertising or publicity pertaining to distribution of the software without
10c76ae52dSmrg * specific, written prior permission.  Keith Packard makes no
11c76ae52dSmrg * representations about the suitability of this software for any purpose.  It
12c76ae52dSmrg * is provided "as is" without express or implied warranty.
13c76ae52dSmrg *
14c76ae52dSmrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15c76ae52dSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16c76ae52dSmrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17c76ae52dSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18c76ae52dSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19c76ae52dSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20c76ae52dSmrg * PERFORMANCE OF THIS SOFTWARE.
21c76ae52dSmrg */
22c76ae52dSmrg
23c76ae52dSmrg#include "xftint.h"
24c76ae52dSmrg
25c76ae52dSmrgstatic const FcObjectType	_XftObjectTypes[] = {
26c76ae52dSmrg    { XFT_CORE,		FcTypeBool, },
27c76ae52dSmrg    { XFT_XLFD,		FcTypeString, },
28c76ae52dSmrg    { XFT_RENDER,	FcTypeBool, },
290d590c07Smrg    { XFT_MAX_GLYPH_MEMORY, FcTypeInteger, },
30c76ae52dSmrg};
31c76ae52dSmrg
32c76ae52dSmrg#define NUM_OBJECT_TYPES    (sizeof _XftObjectTypes / sizeof _XftObjectTypes[0])
33c76ae52dSmrg
340d590c07Smrgstatic FcBool _XftNameInitialized;
35c76ae52dSmrg
362836776bSmrg_X_HIDDEN void
37c76ae52dSmrg_XftNameInit (void)
38c76ae52dSmrg{
39c76ae52dSmrg    if (_XftNameInitialized)
40c76ae52dSmrg	return;
41c76ae52dSmrg    _XftNameInitialized = FcTrue;
42c76ae52dSmrg    FcNameRegisterObjectTypes (_XftObjectTypes, NUM_OBJECT_TYPES);
43c76ae52dSmrg}
44c76ae52dSmrg
452836776bSmrg_X_EXPORT FcPattern
46c76ae52dSmrg*XftNameParse (const char *name)
472836776bSmrg{
48c76ae52dSmrg    _XftNameInit ();
492836776bSmrg    return FcNameParse ((FcChar8 *) name);
50c76ae52dSmrg}
51c76ae52dSmrg
52c76ae52dSmrg_X_EXPORT FcBool
53c76ae52dSmrgXftNameUnparse (FcPattern *pat, char *dest, int len)
54c76ae52dSmrg{
55c76ae52dSmrg    FcChar8 *name;
56c76ae52dSmrg
57c76ae52dSmrg    _XftNameInit ();
58c76ae52dSmrg    name = FcNameUnparse (pat);
59c76ae52dSmrg    if (!name)
60c76ae52dSmrg	return FcFalse;
61c76ae52dSmrg    if (strlen ((char *) name) + 1 > len)
62c76ae52dSmrg    {
63c76ae52dSmrg	FcPattern *new = FcPatternDuplicate (pat);
64c76ae52dSmrg	free (name);
65c76ae52dSmrg	FcPatternDel (new, FC_LANG);
66c76ae52dSmrg	FcPatternDel (new, FC_CHARSET);
67c76ae52dSmrg	name = FcNameUnparse (new);
68c76ae52dSmrg	FcPatternDestroy (new);
69c76ae52dSmrg	if (!name)
70c76ae52dSmrg	    return FcFalse;
71c76ae52dSmrg	if (strlen ((char *) name) + 1 > len)
72c76ae52dSmrg	{
73c76ae52dSmrg	    strncpy (dest, ((char *) name), (size_t) len - 1);
74c76ae52dSmrg	    dest[len - 1] = '\0';
75c76ae52dSmrg	    free (name);
76c76ae52dSmrg	    return FcFalse;
77c76ae52dSmrg	}
78c76ae52dSmrg    }
79c76ae52dSmrg    strcpy (dest, ((char *) name));
80c76ae52dSmrg    free (name);
81c76ae52dSmrg    return FcTrue;
82c76ae52dSmrg}
83