mirror of
https://github.com/bzotto/ClassicMacTypography.git
synced 2024-11-27 06:50:26 +00:00
79 lines
1.6 KiB
Objective-C
79 lines
1.6 KiB
Objective-C
//
|
|
// MacRomanString.m
|
|
// Copyright © 2018 Ben Zotto. All rights reserved.
|
|
//
|
|
|
|
#import "MacRomanString.h"
|
|
|
|
@interface MacRomanString ()
|
|
{
|
|
unsigned char * _cstring;
|
|
NSUInteger _length;
|
|
}
|
|
@end
|
|
|
|
@implementation MacRomanString
|
|
- (id)initWithCString:(const char *)cstring
|
|
{
|
|
if (!cstring) return nil;
|
|
if ((self = [super init])) {
|
|
self->_length = strlen(cstring);
|
|
self->_cstring = (unsigned char *)strdup(cstring);
|
|
if (!self->_cstring) {
|
|
return nil;
|
|
}
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (id)initWithCChars:(const char *)cchars length:(NSUInteger)length
|
|
{
|
|
if (!cchars) return nil;
|
|
if ((self = [super init])) {
|
|
self->_length = length;
|
|
self->_cstring = malloc(length + 1);
|
|
if (!self->_cstring) {
|
|
return nil;
|
|
}
|
|
memcpy(self->_cstring, cchars, length);
|
|
self->_cstring[length] = '\0';
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
if (_cstring) {
|
|
free(_cstring);
|
|
}
|
|
}
|
|
- (unsigned char)characterAtIndex:(NSUInteger)index
|
|
{
|
|
assert(index < self->_length);
|
|
return _cstring[index];
|
|
}
|
|
|
|
- (MacRomanString *)substringWithRange:(NSRange)range
|
|
{
|
|
if (range.location + range.length > self->_length) {
|
|
return nil;
|
|
}
|
|
return [[MacRomanString alloc] initWithCChars:(const char *)&_cstring[range.location] length:range.length];
|
|
}
|
|
@end
|
|
|
|
//
|
|
// Category
|
|
//
|
|
|
|
@implementation NSString (MacRomanString)
|
|
- (MacRomanString *)macRomanString
|
|
{
|
|
const char * cstr = [self cStringUsingEncoding:NSMacOSRomanStringEncoding];
|
|
if (cstr) {
|
|
return [[MacRomanString alloc] initWithCString:cstr];
|
|
}
|
|
return nil;
|
|
}
|
|
@end
|