105 lines
2.2 KiB
Objective-C
105 lines
2.2 KiB
Objective-C
//
|
|
// MPToken.m
|
|
// MathPad
|
|
//
|
|
// Created by Kim Wittenburg on 19.09.14.
|
|
// Copyright (c) 2014 Kim Wittenburg. All rights reserved.
|
|
//
|
|
|
|
#import "MPToken.h"
|
|
|
|
@implementation MPToken {
|
|
NSRange _range;
|
|
MPTokenType _tokenType;
|
|
NSString *_stringValue;
|
|
}
|
|
|
|
- (instancetype)initEOFTokenAtLocation:(NSUInteger)eofLocation
|
|
{
|
|
self = [super init];
|
|
if (self) {
|
|
_range = NSMakeRange(eofLocation, 0);
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (instancetype)initWithRange:(NSRange)range stringValue:(NSString *)input
|
|
{
|
|
self = [super init];
|
|
if (self) {
|
|
_range = range;
|
|
_stringValue = input.copy;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (instancetype)initWithTokenType:(MPTokenType)tokenType
|
|
range:(NSRange)range
|
|
stringValue:(NSString *)input
|
|
{
|
|
self = [self initWithRange:range
|
|
stringValue:input];
|
|
if (self) {
|
|
_tokenType = tokenType;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (NSRange)range
|
|
{
|
|
return _range;
|
|
}
|
|
|
|
- (MPTokenType)tokenType
|
|
{
|
|
return _tokenType;
|
|
}
|
|
|
|
- (NSString *)stringValue
|
|
{
|
|
return _stringValue;
|
|
}
|
|
|
|
- (NSString *)description
|
|
{
|
|
return self.stringValue;
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
@implementation MPToken (MPTokenExtension)
|
|
|
|
- (NSUInteger)numberOfOperators
|
|
{
|
|
NSString *operatorString = [[self.stringValue componentsSeparatedByString:@" "] componentsJoinedByString:@""];
|
|
return operatorString.length;
|
|
}
|
|
|
|
- (NSDecimalNumber *)operatorValue
|
|
{
|
|
NSString *operatorString = [[self.stringValue componentsSeparatedByString:@" "] componentsJoinedByString:@""];
|
|
NSDecimalNumber *value = [NSDecimalNumber one];
|
|
for (NSUInteger charIndex = 0; charIndex < operatorString.length; charIndex++) {
|
|
NSString *operator = [operatorString substringWithRange:NSMakeRange(charIndex, 1)];
|
|
if ([operator isEqualToString:@"-"]) {
|
|
value = [value decimalNumberByMultiplyingBy:[[NSDecimalNumber alloc] initWithInteger:-1]];
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
|
|
- (NSDecimalNumber *)number
|
|
{
|
|
return [NSDecimalNumber decimalNumberWithString:self.stringValue
|
|
locale:[NSLocale currentLocale]];
|
|
}
|
|
|
|
- (NSString *)variable
|
|
{
|
|
return self.stringValue;
|
|
}
|
|
|
|
|
|
@end
|