From 576dc4dfb2241c7848b756a044ae464f38c53b65 Mon Sep 17 00:00:00 2001 From: iska Date: Mon, 22 Jun 2015 00:42:34 +0200 Subject: [PATCH] Add CSS Token classes --- HTMLKit.xcodeproj/project.pbxproj | 10 ++++ HTMLKit/CSSToken.h | 80 +++++++++++++++++++++++++++++++ HTMLKit/CSSToken.m | 62 ++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 HTMLKit/CSSToken.h create mode 100644 HTMLKit/CSSToken.m diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj index 2fb0750..0da4ce7 100644 --- a/HTMLKit.xcodeproj/project.pbxproj +++ b/HTMLKit.xcodeproj/project.pbxproj @@ -117,6 +117,9 @@ 624B371E1B24E9BA0010BDDF /* CSSInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 624B371C1B24E9BA0010BDDF /* CSSInputStream.h */; }; 624B371F1B24E9BA0010BDDF /* CSSInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B371D1B24E9BA0010BDDF /* CSSInputStream.m */; }; 624B37201B24E9BA0010BDDF /* CSSInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B371D1B24E9BA0010BDDF /* CSSInputStream.m */; }; + 624B7DDC1B2E3AAB00A4BD61 /* CSSToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 624B7DDA1B2E3AAB00A4BD61 /* CSSToken.h */; }; + 624B7DDD1B2E3AAB00A4BD61 /* CSSToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B7DDB1B2E3AAB00A4BD61 /* CSSToken.m */; }; + 624B7DDE1B2E3AAB00A4BD61 /* CSSToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B7DDB1B2E3AAB00A4BD61 /* CSSToken.m */; }; 624B9FB21AE0313300646C4C /* HTMLKitStringCategoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B9FB11AE0313300646C4C /* HTMLKitStringCategoryTests.m */; }; 624B9FB31AE0313300646C4C /* HTMLKitStringCategoryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B9FB11AE0313300646C4C /* HTMLKitStringCategoryTests.m */; }; 624B9FB51AE0391400646C4C /* HTMLKitOrderedDictionaryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B9FB41AE0391400646C4C /* HTMLKitOrderedDictionaryTests.m */; }; @@ -285,6 +288,8 @@ 624B28C31B04190D0048D328 /* NSCharacterSet+HTMLKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSCharacterSet+HTMLKit.m"; sourceTree = ""; }; 624B371C1B24E9BA0010BDDF /* CSSInputStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSInputStream.h; sourceTree = ""; }; 624B371D1B24E9BA0010BDDF /* CSSInputStream.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSSInputStream.m; sourceTree = ""; }; + 624B7DDA1B2E3AAB00A4BD61 /* CSSToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSToken.h; sourceTree = ""; }; + 624B7DDB1B2E3AAB00A4BD61 /* CSSToken.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSSToken.m; sourceTree = ""; }; 624B9FB11AE0313300646C4C /* HTMLKitStringCategoryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitStringCategoryTests.m; sourceTree = ""; }; 624B9FB41AE0391400646C4C /* HTMLKitOrderedDictionaryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitOrderedDictionaryTests.m; sourceTree = ""; }; 624FC3791AE591D80015DDF9 /* HTMLKitNodesTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitNodesTests.m; sourceTree = ""; }; @@ -379,6 +384,8 @@ 624B371D1B24E9BA0010BDDF /* CSSInputStream.m */, 623F13A81AFC11D900C90BF4 /* CSSTokenizer.h */, 623F13A91AFC11D900C90BF4 /* CSSTokenizer.m */, + 624B7DDA1B2E3AAB00A4BD61 /* CSSToken.h */, + 624B7DDB1B2E3AAB00A4BD61 /* CSSToken.m */, 62491C461AFE51F100ACF9E2 /* CSSLexer.h */, 62491C451AFE51F100ACF9E2 /* CSSLexer.c */, 62079BE71AF56F1E00D3B402 /* CSSSelector.h */, @@ -657,6 +664,7 @@ 62D89DB21AE7081600B6243D /* HTMLTokenizerCharacters.h in Headers */, 62D89DB31AE7081600B6243D /* HTMLNamespaces.h in Headers */, 624B28BC1B03DAB70048D328 /* HTMLNodeFilter.h in Headers */, + 624B7DDC1B2E3AAB00A4BD61 /* CSSToken.h in Headers */, 624B28BF1B0413200048D328 /* CSSAttributeSelector.h in Headers */, 62D89DB41AE7081600B6243D /* HTMLElementTypes.h in Headers */, 62D89DB51AE7081600B6243D /* HTMLElementAdjustment.h in Headers */, @@ -871,6 +879,7 @@ 6279F87619E1808D00F12EE5 /* HTMLElement.m in Sources */, 625A150A19C78ABA00AD0C32 /* HTMLInputStreamReader.m in Sources */, 623857931A9E772B003A45D9 /* HTMLDocument.m in Sources */, + 624B7DDE1B2E3AAB00A4BD61 /* CSSToken.m in Sources */, 623406E81ADB05AD004677A3 /* HTMLDocumentFragment.m in Sources */, 624717B91B21FE5400B38302 /* HTMLNodeFilter.m in Sources */, 624493A819CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */, @@ -937,6 +946,7 @@ 6279F87519E1808D00F12EE5 /* HTMLElement.m in Sources */, 625A150919C78ABA00AD0C32 /* HTMLInputStreamReader.m in Sources */, 623857921A9E772B003A45D9 /* HTMLDocument.m in Sources */, + 624B7DDD1B2E3AAB00A4BD61 /* CSSToken.m in Sources */, 623406E71ADB05AD004677A3 /* HTMLDocumentFragment.m in Sources */, 624717B81B21FE5400B38302 /* HTMLNodeFilter.m in Sources */, 624493A719CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */, diff --git a/HTMLKit/CSSToken.h b/HTMLKit/CSSToken.h new file mode 100644 index 0000000..cc06fdb --- /dev/null +++ b/HTMLKit/CSSToken.h @@ -0,0 +1,80 @@ +// +// CSSToken.h +// HTMLKit +// +// Created by Iska on 15/06/15. +// Copyright (c) 2015 BrainCookie. All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, CSSTokenType) +{ + CSSTokenTypeIdent, + CSSTokenTypeFunction, + CSSTokenTypeAtKeyword, + CSSTokenTypeHash, + CSSTokenTypeString, + CSSTokenTypeBadString, + CSSTokenTypeURL, + CSSTokenTypeBadURL, + CSSTokenTypeDelim, + CSSTokenTypeNumber, + CSSTokenTypePercentage, + CSSTokenTypeDimension, + CSSTokenTypeUnicodeRange, + CSSTokenTypeIncludeMatch, + CSSTokenTypeDashMatch, + CSSTokenTypePrefixMatch, + CSSTokenTypeSuffixMatch, + CSSTokenTypeSubstringMatch, + CSSTokenTypeColumn, + CSSTokenTypeWhitespace, + CSSTokenTypeCommentDeclarationOpen, + CSSTokenTypeCommentDeclarationClose, + CSSTokenTypeColon, + CSSTokenTypeSemicolon, + CSSTokenTypeComma, + CSSTokenTypeSquareBracketOpen, + CSSTokenTypeSquareBracketClose, + CSSTokenTypeParenthesisOpen, + CSSTokenTypeParenthesisClose, + CSSTokenTypeCurlyBracketOpen, + CSSTokenTypeCurlyBracketClose, + CSSTokenTypeEOF +}; + +@interface CSSToken : NSObject + +@property (nonatomic, assign) CSSTokenType type; +@property (nonatomic, assign) NSUInteger start; +@property (nonatomic, assign) NSUInteger end; +@property (nonatomic, copy) NSString *text; + ++ (instancetype)tokenWithType:(CSSTokenType)type; + +@end + +#pragma mark - Numeric Tokens + +typedef NS_ENUM(NSUInteger, CSSNumericTokenType) +{ + CSSNumericTokenTypeInteger, + CSSNumericTokenTypeNumber +}; + + +@interface CSSNumericToken : CSSToken +@property (nonatomic, assign) CSSNumericTokenType numericType; +@property (nonatomic, strong) NSNumber *value; +@end + +@interface CSSDimensionToken : CSSNumericToken +@property (nonatomic, copy) NSString *unit; +@end + +@interface CSSNumberToken : CSSNumericToken +@end + +@interface CSSPercentageToken : CSSNumericToken +@end diff --git a/HTMLKit/CSSToken.m b/HTMLKit/CSSToken.m new file mode 100644 index 0000000..22bf324 --- /dev/null +++ b/HTMLKit/CSSToken.m @@ -0,0 +1,62 @@ +// +// CSSToken.m +// HTMLKit +// +// Created by Iska on 15/06/15. +// Copyright (c) 2015 BrainCookie. All rights reserved. +// + +#import "CSSToken.h" + +@implementation CSSToken + ++ (instancetype)tokenWithType:(CSSTokenType)type +{ + CSSToken *token = [[self alloc] init]; + token.type = type; + return token; +} + +- (instancetype)initWithType:(CSSTokenType)type +{ + self = [super init]; + if (self) { + self.type = type; + } + return self; +} + +@end + +@implementation CSSNumericToken +@end + +@implementation CSSDimensionToken + +- (instancetype)init +{ + self = [self initWithType:CSSTokenTypeDimension]; + return self; +} + +@end + +@implementation CSSNumberToken + +- (instancetype)init +{ + self = [self initWithType:CSSTokenTypeNumber]; + return self; +} + +@end + +@implementation CSSPercentageToken + +- (instancetype)init +{ + self = [self initWithType:CSSTokenTypePercentage]; + return self; +} + +@end \ No newline at end of file