mirror of
https://github.com/bzotto/ClassicMacTypography.git
synced 2024-11-27 06:50:26 +00:00
79 lines
1.6 KiB
Mathematica
79 lines
1.6 KiB
Mathematica
|
//
|
||
|
// 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
|