snes9x/macosx/mac-stringtools.mm

112 lines
2.9 KiB
Plaintext
Executable File

/*****************************************************************************\
Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
This file is licensed under the Snes9x License.
For further information, consult the LICENSE file in the root directory.
\*****************************************************************************/
/***********************************************************************************
SNES9X for Mac OS (c) Copyright John Stiles
Snes9x for Mac OS X
(c) Copyright 2001 - 2011 zones
(c) Copyright 2002 - 2005 107
(c) Copyright 2002 PB1400c
(c) Copyright 2004 Alexander and Sander
(c) Copyright 2004 - 2005 Steven Seeger
(c) Copyright 2005 Ryan Vogt
(c) Copyright 2019 Michael Donald Buckley
***********************************************************************************/
#include "mac-prefix.h"
#include "mac-stringtools.h"
CFStringRef CopyFixNameStrings (const char *itext, uint8 region)
{
CFStringRef str = NULL;
if (region != 0) // non-Japanese
{
char btext[256];
size_t len = strlen(itext);
btext[len] = 0;
for (unsigned int i = 0; i < len ; i++)
btext[i] = isgraph(itext[i]) ? itext[i] : ' ';
str = CFStringCreateWithCString(kCFAllocatorDefault, btext, kCFStringEncodingNonLossyASCII);
}
else
str = CFStringCreateWithCString(kCFAllocatorDefault, itext, kCFStringEncodingMacJapanese); // assuming Shift-JIS
return (str);
}
#ifdef MAC_TIGER_PANTHER_SUPPORT
OSStatus CreateATSUIStyleFromFontFullNameAndSize (const char *fontName, int fontSize, ATSUStyle *theStyle)
{
OSStatus err;
ATSUStyle localStyle;
ATSUFontID atsuFont;
Fixed atsuSize;
ATSUAttributeTag theTags[] = { kATSUFontTag, kATSUSizeTag };
ByteCount theSizes[] = { sizeof(ATSUFontID), sizeof(Fixed) };
ATSUAttributeValuePtr theValues[] = { NULL, NULL };
atsuFont = 0;
atsuSize = FixRatio(fontSize, 1);
localStyle = NULL;
theValues[0] = &atsuFont;
theValues[1] = &atsuSize;
err = ATSUFindFontFromName(fontName, strlen(fontName), kFontFullName, kFontNoPlatform, kFontNoScript, kFontNoLanguage, &atsuFont);
if (err == noErr)
{
err = ATSUCreateStyle(&localStyle);
if (err == noErr)
{
err = ATSUSetAttributes(localStyle, sizeof(theTags) / sizeof(theTags[0]), theTags, theSizes, theValues);
if (err == noErr)
{
*theStyle = localStyle;
return (noErr);
}
}
}
if (localStyle != NULL)
err = ATSUDisposeStyle(localStyle);
return (err);
}
#endif
const char * GetMultiByteCharacters (CFStringRef inText, int cutAt)
{
static char buf[256];
CFStringRef str;
buf[0] = 0;
if (!inText || (cutAt < 1))
return (buf);
if (CFStringGetCString(inText, buf, sizeof(buf), CFStringGetSystemEncoding()))
{
buf[cutAt] = 0;
str = CFStringCreateWithCString(kCFAllocatorDefault, buf, CFStringGetSystemEncoding());
if (str)
CFRelease(str);
else
buf[cutAt - 1] = 0;
}
return (buf);
}