diff --git a/HTMLKit.xcodeproj/project.pbxproj b/HTMLKit.xcodeproj/project.pbxproj index 868043e..aea30ae 100644 --- a/HTMLKit.xcodeproj/project.pbxproj +++ b/HTMLKit.xcodeproj/project.pbxproj @@ -85,6 +85,9 @@ 624AC90619FBFEA000BD3C4A /* html5lib-tests in Resources */ = {isa = PBXBuildFile; fileRef = 624AC90419FBFE8A00BD3C4A /* html5lib-tests */; }; 624AC90E19FC702E00BD3C4A /* HTML Standard.html in Resources */ = {isa = PBXBuildFile; fileRef = 624AC90D19FC702E00BD3C4A /* HTML Standard.html */; }; 624AC90F19FC702E00BD3C4A /* HTML Standard.html in Resources */ = {isa = PBXBuildFile; fileRef = 624AC90D19FC702E00BD3C4A /* HTML Standard.html */; }; + 624B28B81B03DA820048D328 /* CSSTypeSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 624B28B61B03DA820048D328 /* CSSTypeSelector.h */; }; + 624B28B91B03DA820048D328 /* CSSTypeSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B28B71B03DA820048D328 /* CSSTypeSelector.m */; }; + 624B28BA1B03DA820048D328 /* CSSTypeSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B28B71B03DA820048D328 /* CSSTypeSelector.m */; }; 624B28BC1B03DAB70048D328 /* HTMLNodeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 624B28BB1B03DAB70048D328 /* HTMLNodeFilter.h */; }; 624B28C41B04190D0048D328 /* NSCharacterSet+HTMLKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 624B28C21B04190D0048D328 /* NSCharacterSet+HTMLKit.h */; }; 624B28C51B04190D0048D328 /* NSCharacterSet+HTMLKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 624B28C31B04190D0048D328 /* NSCharacterSet+HTMLKit.m */; }; @@ -235,6 +238,8 @@ 624AC90019FBF9ED00BD3C4A /* HTMLKitTokenizerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLKitTokenizerTests.m; sourceTree = ""; }; 624AC90419FBFE8A00BD3C4A /* html5lib-tests */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "html5lib-tests"; sourceTree = ""; }; 624AC90D19FC702E00BD3C4A /* HTML Standard.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "HTML Standard.html"; sourceTree = ""; }; + 624B28B61B03DA820048D328 /* CSSTypeSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSTypeSelector.h; sourceTree = ""; }; + 624B28B71B03DA820048D328 /* CSSTypeSelector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CSSTypeSelector.m; sourceTree = ""; }; 624B28BB1B03DAB70048D328 /* HTMLNodeFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLNodeFilter.h; sourceTree = ""; }; 624B28C21B04190D0048D328 /* NSCharacterSet+HTMLKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCharacterSet+HTMLKit.h"; sourceTree = ""; }; 624B28C31B04190D0048D328 /* NSCharacterSet+HTMLKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSCharacterSet+HTMLKit.m"; sourceTree = ""; }; @@ -333,6 +338,8 @@ 62491C451AFE51F100ACF9E2 /* CSSLexer.c */, 62079BE71AF56F1E00D3B402 /* CSSSelector.h */, 62079BE81AF56F1E00D3B402 /* CSSSelector.m */, + 624B28B61B03DA820048D328 /* CSSTypeSelector.h */, + 624B28B71B03DA820048D328 /* CSSTypeSelector.m */, ); name = Selectors; sourceTree = ""; @@ -596,6 +603,7 @@ 6235CEA01AA5170A0026937B /* HTMLMarker.h in Headers */, 62F31FDD19E9DCCF007F0657 /* HTMLTokenizerEntities.h in Headers */, 623406E11ADB04F9004677A3 /* HTMLTemplate.h in Headers */, + 624B28B81B03DA820048D328 /* CSSTypeSelector.h in Headers */, 6234BEEE1AABBF1400DEB15F /* HTMLStackOfOpenElements.h in Headers */, 6238C9851AB8D6330006512E /* HTMLKitExceptions.h in Headers */, 6238039F1AB63A8C008A53D0 /* HTMLEOFToken.h in Headers */, @@ -791,6 +799,7 @@ 624493A819CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */, 623F13AC1AFC11D900C90BF4 /* CSSTokenizer.m in Sources */, 62491C481AFE51F100ACF9E2 /* CSSLexer.c in Sources */, + 624B28BA1B03DA820048D328 /* CSSTypeSelector.m in Sources */, 625A14BE19C7829400AD0C32 /* HTMLKit.m in Sources */, 623857981A9E8606003A45D9 /* HTMLDocumentType.m in Sources */, 62079BEB1AF56F1E00D3B402 /* CSSSelector.m in Sources */, @@ -847,6 +856,7 @@ 624493A719CCC54100BCDDF4 /* HTMLTokenizer.m in Sources */, 623F13AB1AFC11D900C90BF4 /* CSSTokenizer.m in Sources */, 62491C471AFE51F100ACF9E2 /* CSSLexer.c in Sources */, + 624B28B91B03DA820048D328 /* CSSTypeSelector.m in Sources */, 625A150219C783DE00AD0C32 /* HTMLKit.m in Sources */, 623857971A9E8606003A45D9 /* HTMLDocumentType.m in Sources */, 62079BEA1AF56F1E00D3B402 /* CSSSelector.m in Sources */, diff --git a/HTMLKit/CSSTypeSelector.h b/HTMLKit/CSSTypeSelector.h new file mode 100644 index 0000000..6cd2e16 --- /dev/null +++ b/HTMLKit/CSSTypeSelector.h @@ -0,0 +1,19 @@ +// +// CSSTypeSelector.h +// HTMLKit +// +// Created by Iska on 13/05/15. +// Copyright (c) 2015 BrainCookie. All rights reserved. +// + +#import +#import "CSSSelector.h" + +@interface CSSTypeSelector : CSSSelector + +@property (nonatomic, copy) NSString *type; + ++ (instancetype)universalSelector; +- (instancetype)initWithType:(NSString *)type; + +@end diff --git a/HTMLKit/CSSTypeSelector.m b/HTMLKit/CSSTypeSelector.m new file mode 100644 index 0000000..dd916bb --- /dev/null +++ b/HTMLKit/CSSTypeSelector.m @@ -0,0 +1,45 @@ +// +// CSSTypeSelector.m +// HTMLKit +// +// Created by Iska on 13/05/15. +// Copyright (c) 2015 BrainCookie. All rights reserved. +// + +#import "CSSTypeSelector.h" +#import "HTMLElement.h" +#import "NSString+HTMLKit.h" + +@interface CSSTypeSelector () +{ + NSString *_type; +} +@end + +@implementation CSSTypeSelector + ++ (instancetype)universalSelector +{ + return [[self alloc] initWithType:@"*"]; +} + +- (instancetype)initWithType:(NSString *)type +{ + self = [super init]; + if (self) { + self.type = [type copy]; + } + return self; +} + +- (BOOL)matchesElement:(HTMLElement *)element +{ + return [_type isEqualToString:@"*"] || [_type isEqualToStringIgnoringCase:element.tagName]; +} + +- (NSString *)description +{ + return [NSString stringWithFormat:@"<%@: %p '%@'>", self.class, self, self.type]; +} + +@end