⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xfontname.c

📁 早期freebsd实现
💻 C
字号:
/* * XFontName.c * * build/parse X Font name strings */#include <X11/Xlib.h>#include <X11/Xos.h>#include "XFontName.h"#include <ctype.h>static char *extractStringField (name, buffer, size, attrp, bit)	char		*name;	char		*buffer;	int		size;	unsigned int	*attrp;	unsigned int	bit;{	char	*buf = buffer;	if (!*name)		return 0;	while (*name && *name != '-' && size > 0) {		*buf++ = *name++;		--size;	}	if (size <= 0)		return 0;	*buf = '\0';	if (buffer[0] != '*' || buffer[1] != '\0')		*attrp |= bit;	if (*name == '-')		return name+1;	return name;}static char *extractUnsignedField (name, result, attrp, bit)	char		*name;	unsigned int	*result;	unsigned int	*attrp;	unsigned int	bit;{	char		buf[256];	char		*c;	unsigned int	i;	name = extractStringField (name, buf, sizeof (buf), attrp, bit);	if (!name)		return 0;	if (!(*attrp & bit))		return name;	i = 0;	for (c = buf; *c; c++) {		if (!isdigit (*c))			return 0;		i = i * 10 + (*c - '0');	}	*result = i;	return name;}BoolXParseFontName (fontNameString, fontName, fontNameAttributes)	XFontNameString	fontNameString;	XFontName	*fontName;	unsigned int	*fontNameAttributes;{	char		*name = fontNameString;	XFontName	temp;	unsigned int	attributes = 0;#define GetString(field,bit)\	if (!(name = extractStringField \		(name, temp.field, sizeof (temp.field),\		&attributes, bit))) \		return False;#define GetUnsigned(field,bit)\	if (!(name = extractUnsignedField \		(name, &temp.field, \		&attributes, bit))) \		return False;	GetString (Registry, FontNameRegistry)	GetString (Foundry, FontNameFoundry)	GetString (FamilyName, FontNameFamilyName)	GetString (WeightName, FontNameWeightName)	GetString (Slant, FontNameSlant)	GetString (SetwidthName, FontNameSetwidthName)	GetString (AddStyleName, FontNameAddStyleName)	GetUnsigned (PixelSize, FontNamePixelSize)	GetUnsigned (PointSize, FontNamePointSize)	GetUnsigned (ResolutionX, FontNameResolutionX)	GetUnsigned (ResolutionY, FontNameResolutionY)	GetString (Spacing, FontNameSpacing)	GetUnsigned (AverageWidth, FontNameAverageWidth)	GetString (CharSetRegistry, FontNameCharSetRegistry)	if (!*name) {		temp.CharSetEncoding[0] = '\0';		attributes |= FontNameCharSetEncoding;	} else {		GetString (CharSetEncoding, FontNameCharSetEncoding)	}	*fontName = temp;	*fontNameAttributes = attributes;	return True;}static char *utoa (u, s, size)	unsigned int	u;	char		*s;	int		size;{	char	*t;	t = s + size;	*--t = '\0';	do		*--t = (u % 10) + '0';	while (u /= 10);	return t;}BoolXFormatFontName (fontName, fontNameAttributes, fontNameString)	XFontName	*fontName;	unsigned int	fontNameAttributes;	XFontNameString	fontNameString;{	XFontNameString	tmp;	char		*name = tmp, *f;	int		left = sizeof (tmp) - 1;	char		number[32];#define PutString(field, bit)\	f = (fontNameAttributes & bit) ? \		fontName->field \		: "*"; \	if ((left -= strlen (f)) < 0) \		return False; \	while (*f) \		if ((*name++ = *f++) == '-') \			return False; #define PutHyphen()\	if (--left < 0) \		return False; \	*name++ = '-';#define PutUnsigned(field, bit) \	f = (fontNameAttributes & bit) ? \		utoa (fontName->field, number, sizeof (number)) \		: "*"; \	if ((left -= strlen (f)) < 0) \		return False; \	while (*f) \		*name++ = *f++;	PutString (Registry, FontNameRegistry)	PutHyphen ();	PutString (Foundry, FontNameFoundry)	PutHyphen ();	PutString (FamilyName, FontNameFamilyName)	PutHyphen ();	PutString (WeightName, FontNameWeightName)	PutHyphen ();	PutString (Slant, FontNameSlant)	PutHyphen ();	PutString (SetwidthName, FontNameSetwidthName)	PutHyphen ();	PutString (AddStyleName, FontNameAddStyleName)	PutHyphen ();	PutUnsigned (PixelSize, FontNamePixelSize)	PutHyphen ();	PutUnsigned (PointSize, FontNamePointSize)	PutHyphen ();	PutUnsigned (ResolutionX, FontNameResolutionX)	PutHyphen ();	PutUnsigned (ResolutionY, FontNameResolutionY)	PutHyphen ();	PutString (Spacing, FontNameSpacing)	PutHyphen ();	PutUnsigned (AverageWidth, FontNameAverageWidth)	PutHyphen ();	PutString (CharSetRegistry, FontNameCharSetRegistry)	PutHyphen ();	PutString (CharSetEncoding, FontNameCharSetEncoding)	*name = '\0';	strcpy (fontNameString, tmp);	return True;}BoolXCompareFontName (name1, name2, fontNameAttributes)	XFontName	*name1, *name2;	unsigned int	fontNameAttributes;{#define CompareString(field,bit) \	if (fontNameAttributes & bit) \		if (strcmp (name1->field, name2->field)) \			return False;#define CompareUnsigned(field,bit) \	if (fontNameAttributes & bit) \		if (name1->field != name2->field) \			return False;	CompareString (Registry, FontNameRegistry)	CompareString (Foundry, FontNameFoundry)	CompareString (FamilyName, FontNameFamilyName)	CompareString (WeightName, FontNameWeightName)	CompareString (Slant, FontNameSlant)	CompareString (SetwidthName, FontNameSetwidthName)	CompareString (AddStyleName, FontNameAddStyleName)	CompareUnsigned (PixelSize, FontNamePixelSize)	CompareUnsigned (PointSize, FontNamePointSize)	CompareUnsigned (ResolutionX, FontNameResolutionX)	CompareUnsigned (ResolutionY, FontNameResolutionY)	CompareString (Spacing, FontNameSpacing)	CompareUnsigned (AverageWidth, FontNameAverageWidth)	CompareString (CharSetRegistry, FontNameCharSetRegistry)	CompareString (CharSetEncoding, FontNameCharSetEncoding)	return True;}XCopyFontName (name1, name2, fontNameAttributes)	XFontName	*name1, *name2;	unsigned int	fontNameAttributes;{#define CopyString(field,bit) \	if (fontNameAttributes & bit) \		strcpy (name2->field, name1->field);#define CopyUnsigned(field,bit) \	if (fontNameAttributes & bit) \		name2->field = name1->field;	CopyString (Registry, FontNameRegistry)	CopyString (Foundry, FontNameFoundry)	CopyString (FamilyName, FontNameFamilyName)	CopyString (WeightName, FontNameWeightName)	CopyString (Slant, FontNameSlant)	CopyString (SetwidthName, FontNameSetwidthName)	CopyString (AddStyleName, FontNameAddStyleName)	CopyUnsigned (PixelSize, FontNamePixelSize)	CopyUnsigned (PointSize, FontNamePointSize)	CopyUnsigned (ResolutionX, FontNameResolutionX)	CopyUnsigned (ResolutionY, FontNameResolutionY)	CopyString (Spacing, FontNameSpacing)	CopyUnsigned (AverageWidth, FontNameAverageWidth)	CopyString (CharSetRegistry, FontNameCharSetRegistry)	CopyString (CharSetEncoding, FontNameCharSetEncoding)	return True;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -