_cairo_atsui_font_create(	const char   	*family, cairo_font_slant_t   slant, cairo_font_weight_t  weight)
_cairo_atsui_font_create(const char *family, cairo_font_slant_t slant, cairo_font_weight_t weight, cairo_font_scale_t *scale, cairo_font_t **font_out)
_cairo_atsui_font_create(	const char   	*family, 							cairo_font_slant_t   slant, 							cairo_font_weight_t  weight){	cairo_atsui_font_t  *font = NULL;	ATSUStyle			style;	ATSUFontID			fontID;	OSStatus			err;	Boolean				isItalic, isBold;			err = ATSUCreateStyle(&style);			switch (weight)	{		case CAIRO_FONT_WEIGHT_BOLD:			isBold = true;			break;		case CAIRO_FONT_WEIGHT_NORMAL:		default:			isBold = false;			break;	}	switch (slant)	{		case CAIRO_FONT_SLANT_ITALIC:			isItalic = true;			break;		case CAIRO_FONT_SLANT_OBLIQUE:			isItalic = false;			break;		case CAIRO_FONT_SLANT_NORMAL:		default:			isItalic = false;			break;	}		err = ATSUFindFontFromName( family, strlen(family),								kFontFamilyName,								kFontNoPlatformCode,								kFontRomanScript,								kFontNoLanguageCode,								&fontID);			ATSUAttributeTag		styleTags[] = {kATSUQDItalicTag, kATSUQDBoldfaceTag, kATSUFontTag};	ATSUAttributeValuePtr   styleValues[] = {&isItalic, &isBold, &fontID};	ByteCount				styleSizes[] = {sizeof(Boolean), sizeof(Boolean), sizeof(ATSUFontID)};	err = ATSUSetAttributes(	style,								sizeof(styleTags) / sizeof(styleTags[0]),								styleTags,								styleSizes,								styleValues);				font = malloc(sizeof(cairo_atsui_font_t));		if (_cairo_unscaled_font_init(&font->base, &cairo_atsui_font_backend) == CAIRO_STATUS_SUCCESS)	{		font->style		= style;		font->fontID	= fontID;						return &font->base;	}			free(font);		return NULL;}