1 /* Copyright (C) 2014 Free Software Foundation, Inc.
3 This file is part of groff.
5 groff is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
10 groff is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 The GNU General Public License version 2 (GPL2) is available in the
16 internet at <http://www.gnu.org/licenses/gpl-2.0.txt>. */
21 * build/parse X Font name strings
26 #include "XFontName.h"
30 extractStringField (char *name, char *buffer, int size,
31 unsigned int *attrp, unsigned int bit)
37 while (*name && *name != '-' && size > 0) {
44 if (buffer[0] != '*' || buffer[1] != '\0')
52 extractUnsignedField (char *name, unsigned int *result,
53 unsigned int *attrp, unsigned int bit)
59 name = extractStringField (name, buf, sizeof (buf), attrp, bit);
65 for (c = buf; *c; c++) {
68 i = i * 10 + (*c - '0');
75 XParseFontName (XFontNameString fontNameString, XFontName *fontName,
76 unsigned int *fontNameAttributes)
78 char *name = fontNameString;
80 unsigned int attributes = 0;
82 #define GetString(field,bit)\
83 if (!(name = extractStringField \
84 (name, temp.field, sizeof (temp.field),\
88 #define GetUnsigned(field,bit)\
89 if (!(name = extractUnsignedField \
94 GetString (Registry, FontNameRegistry)
95 GetString (Foundry, FontNameFoundry)
96 GetString (FamilyName, FontNameFamilyName)
97 GetString (WeightName, FontNameWeightName)
98 GetString (Slant, FontNameSlant)
99 GetString (SetwidthName, FontNameSetwidthName)
100 GetString (AddStyleName, FontNameAddStyleName)
101 GetUnsigned (PixelSize, FontNamePixelSize)
102 GetUnsigned (PointSize, FontNamePointSize)
103 GetUnsigned (ResolutionX, FontNameResolutionX)
104 GetUnsigned (ResolutionY, FontNameResolutionY)
105 GetString (Spacing, FontNameSpacing)
106 GetUnsigned (AverageWidth, FontNameAverageWidth)
107 GetString (CharSetRegistry, FontNameCharSetRegistry)
109 temp.CharSetEncoding[0] = '\0';
110 attributes |= FontNameCharSetEncoding;
112 GetString (CharSetEncoding, FontNameCharSetEncoding)
115 *fontNameAttributes = attributes;
120 utoa (unsigned int u, char *s, int size)
127 *--t = (u % 10) + '0';
133 XFormatFontName (XFontName *fontName, unsigned int fontNameAttributes,
134 XFontNameString fontNameString)
137 char *name = tmp, *f;
138 int left = sizeof (tmp) - 1;
141 #define PutString(field, bit)\
142 f = (fontNameAttributes & bit) ? \
145 if ((left -= strlen (f)) < 0) \
148 if ((*name++ = *f++) == '-') \
155 #define PutUnsigned(field, bit) \
156 f = (fontNameAttributes & bit) ? \
157 utoa (fontName->field, number, sizeof (number)) \
159 if ((left -= strlen (f)) < 0) \
164 PutString (Registry, FontNameRegistry)
166 PutString (Foundry, FontNameFoundry)
168 PutString (FamilyName, FontNameFamilyName)
170 PutString (WeightName, FontNameWeightName)
172 PutString (Slant, FontNameSlant)
174 PutString (SetwidthName, FontNameSetwidthName)
176 PutString (AddStyleName, FontNameAddStyleName)
178 PutUnsigned (PixelSize, FontNamePixelSize)
180 PutUnsigned (PointSize, FontNamePointSize)
182 PutUnsigned (ResolutionX, FontNameResolutionX)
184 PutUnsigned (ResolutionY, FontNameResolutionY)
186 PutString (Spacing, FontNameSpacing)
188 PutUnsigned (AverageWidth, FontNameAverageWidth)
190 PutString (CharSetRegistry, FontNameCharSetRegistry)
192 PutString (CharSetEncoding, FontNameCharSetEncoding)
194 strcpy (fontNameString, tmp);
199 XCompareFontName (XFontName *name1, XFontName *name2,
200 unsigned int fontNameAttributes)
202 #define CompareString(field,bit) \
203 if (fontNameAttributes & bit) \
204 if (strcmp (name1->field, name2->field)) \
207 #define CompareUnsigned(field,bit) \
208 if (fontNameAttributes & bit) \
209 if (name1->field != name2->field) \
212 CompareString (Registry, FontNameRegistry)
213 CompareString (Foundry, FontNameFoundry)
214 CompareString (FamilyName, FontNameFamilyName)
215 CompareString (WeightName, FontNameWeightName)
216 CompareString (Slant, FontNameSlant)
217 CompareString (SetwidthName, FontNameSetwidthName)
218 CompareString (AddStyleName, FontNameAddStyleName)
219 CompareUnsigned (PixelSize, FontNamePixelSize)
220 CompareUnsigned (PointSize, FontNamePointSize)
221 CompareUnsigned (ResolutionX, FontNameResolutionX)
222 CompareUnsigned (ResolutionY, FontNameResolutionY)
223 CompareString (Spacing, FontNameSpacing)
224 CompareUnsigned (AverageWidth, FontNameAverageWidth)
225 CompareString (CharSetRegistry, FontNameCharSetRegistry)
226 CompareString (CharSetEncoding, FontNameCharSetEncoding)
231 XCopyFontName (XFontName *name1, XFontName *name2,
232 unsigned int fontNameAttributes)
234 #define CopyString(field,bit) \
235 if (fontNameAttributes & bit) \
236 strcpy (name2->field, name1->field);
238 #define CopyUnsigned(field,bit) \
239 if (fontNameAttributes & bit) \
240 name2->field = name1->field;
242 CopyString (Registry, FontNameRegistry)
243 CopyString (Foundry, FontNameFoundry)
244 CopyString (FamilyName, FontNameFamilyName)
245 CopyString (WeightName, FontNameWeightName)
246 CopyString (Slant, FontNameSlant)
247 CopyString (SetwidthName, FontNameSetwidthName)
248 CopyString (AddStyleName, FontNameAddStyleName)
249 CopyUnsigned (PixelSize, FontNamePixelSize)
250 CopyUnsigned (PointSize, FontNamePointSize)
251 CopyUnsigned (ResolutionX, FontNameResolutionX)
252 CopyUnsigned (ResolutionY, FontNameResolutionY)
253 CopyString (Spacing, FontNameSpacing)
254 CopyUnsigned (AverageWidth, FontNameAverageWidth)
255 CopyString (CharSetRegistry, FontNameCharSetRegistry)
256 CopyString (CharSetEncoding, FontNameCharSetEncoding)