4 * build/parse X Font name strings
13 extractStringField (char *name, char *buffer, int size,
14 unsigned int *attrp, unsigned int bit)
20 while (*name && *name != '-' && size > 0) {
27 if (buffer[0] != '*' || buffer[1] != '\0')
35 extractUnsignedField (char *name, unsigned int *result,
36 unsigned int *attrp, unsigned int bit)
42 name = extractStringField (name, buf, sizeof (buf), attrp, bit);
48 for (c = buf; *c; c++) {
51 i = i * 10 + (*c - '0');
58 XParseFontName (XFontNameString fontNameString, XFontName *fontName,
59 unsigned int *fontNameAttributes)
61 char *name = fontNameString;
63 unsigned int attributes = 0;
65 #define GetString(field,bit)\
66 if (!(name = extractStringField \
67 (name, temp.field, sizeof (temp.field),\
71 #define GetUnsigned(field,bit)\
72 if (!(name = extractUnsignedField \
77 GetString (Registry, FontNameRegistry)
78 GetString (Foundry, FontNameFoundry)
79 GetString (FamilyName, FontNameFamilyName)
80 GetString (WeightName, FontNameWeightName)
81 GetString (Slant, FontNameSlant)
82 GetString (SetwidthName, FontNameSetwidthName)
83 GetString (AddStyleName, FontNameAddStyleName)
84 GetUnsigned (PixelSize, FontNamePixelSize)
85 GetUnsigned (PointSize, FontNamePointSize)
86 GetUnsigned (ResolutionX, FontNameResolutionX)
87 GetUnsigned (ResolutionY, FontNameResolutionY)
88 GetString (Spacing, FontNameSpacing)
89 GetUnsigned (AverageWidth, FontNameAverageWidth)
90 GetString (CharSetRegistry, FontNameCharSetRegistry)
92 temp.CharSetEncoding[0] = '\0';
93 attributes |= FontNameCharSetEncoding;
95 GetString (CharSetEncoding, FontNameCharSetEncoding)
98 *fontNameAttributes = attributes;
103 utoa (unsigned int u, char *s, int size)
110 *--t = (u % 10) + '0';
116 XFormatFontName (XFontName *fontName, unsigned int fontNameAttributes,
117 XFontNameString fontNameString)
120 char *name = tmp, *f;
121 int left = sizeof (tmp) - 1;
124 #define PutString(field, bit)\
125 f = (fontNameAttributes & bit) ? \
128 if ((left -= strlen (f)) < 0) \
131 if ((*name++ = *f++) == '-') \
138 #define PutUnsigned(field, bit) \
139 f = (fontNameAttributes & bit) ? \
140 utoa (fontName->field, number, sizeof (number)) \
142 if ((left -= strlen (f)) < 0) \
147 PutString (Registry, FontNameRegistry)
149 PutString (Foundry, FontNameFoundry)
151 PutString (FamilyName, FontNameFamilyName)
153 PutString (WeightName, FontNameWeightName)
155 PutString (Slant, FontNameSlant)
157 PutString (SetwidthName, FontNameSetwidthName)
159 PutString (AddStyleName, FontNameAddStyleName)
161 PutUnsigned (PixelSize, FontNamePixelSize)
163 PutUnsigned (PointSize, FontNamePointSize)
165 PutUnsigned (ResolutionX, FontNameResolutionX)
167 PutUnsigned (ResolutionY, FontNameResolutionY)
169 PutString (Spacing, FontNameSpacing)
171 PutUnsigned (AverageWidth, FontNameAverageWidth)
173 PutString (CharSetRegistry, FontNameCharSetRegistry)
175 PutString (CharSetEncoding, FontNameCharSetEncoding)
177 strcpy (fontNameString, tmp);
182 XCompareFontName (XFontName *name1, XFontName *name2,
183 unsigned int fontNameAttributes)
185 #define CompareString(field,bit) \
186 if (fontNameAttributes & bit) \
187 if (strcmp (name1->field, name2->field)) \
190 #define CompareUnsigned(field,bit) \
191 if (fontNameAttributes & bit) \
192 if (name1->field != name2->field) \
195 CompareString (Registry, FontNameRegistry)
196 CompareString (Foundry, FontNameFoundry)
197 CompareString (FamilyName, FontNameFamilyName)
198 CompareString (WeightName, FontNameWeightName)
199 CompareString (Slant, FontNameSlant)
200 CompareString (SetwidthName, FontNameSetwidthName)
201 CompareString (AddStyleName, FontNameAddStyleName)
202 CompareUnsigned (PixelSize, FontNamePixelSize)
203 CompareUnsigned (PointSize, FontNamePointSize)
204 CompareUnsigned (ResolutionX, FontNameResolutionX)
205 CompareUnsigned (ResolutionY, FontNameResolutionY)
206 CompareString (Spacing, FontNameSpacing)
207 CompareUnsigned (AverageWidth, FontNameAverageWidth)
208 CompareString (CharSetRegistry, FontNameCharSetRegistry)
209 CompareString (CharSetEncoding, FontNameCharSetEncoding)
214 XCopyFontName (XFontName *name1, XFontName *name2,
215 unsigned int fontNameAttributes)
217 #define CopyString(field,bit) \
218 if (fontNameAttributes & bit) \
219 strcpy (name2->field, name1->field);
221 #define CopyUnsigned(field,bit) \
222 if (fontNameAttributes & bit) \
223 name2->field = name1->field;
225 CopyString (Registry, FontNameRegistry)
226 CopyString (Foundry, FontNameFoundry)
227 CopyString (FamilyName, FontNameFamilyName)
228 CopyString (WeightName, FontNameWeightName)
229 CopyString (Slant, FontNameSlant)
230 CopyString (SetwidthName, FontNameSetwidthName)
231 CopyString (AddStyleName, FontNameAddStyleName)
232 CopyUnsigned (PixelSize, FontNamePixelSize)
233 CopyUnsigned (PointSize, FontNamePointSize)
234 CopyUnsigned (ResolutionX, FontNameResolutionX)
235 CopyUnsigned (ResolutionY, FontNameResolutionY)
236 CopyString (Spacing, FontNameSpacing)
237 CopyUnsigned (AverageWidth, FontNameAverageWidth)
238 CopyString (CharSetRegistry, FontNameCharSetRegistry)
239 CopyString (CharSetEncoding, FontNameCharSetEncoding)