From 64ad9c97184d4a317d7e643c9332f971965d55b8 Mon Sep 17 00:00:00 2001 From: Curtis Hard Date: Tue, 19 Jan 2016 14:30:38 +0000 Subject: [PATCH] Changes... --- .../UserInterfaceState.xcuserstate | Bin 46302 -> 47677 bytes IJSVGExample/IJSVGExample/test.svg | 13 +- source/IJSVGStyleSheetSelector.m | 201 +++++++++--------- 3 files changed, 99 insertions(+), 115 deletions(-) diff --git a/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate b/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate index c64b844299b66dda120dc93c60f2edf1d9394ea8..b4fb2a8c19822649b44144a77463b85ba10fd911 100644 GIT binary patch literal 47677 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 V|1pC;{rdechgSSA|NqX<_%B0MCMEy? diff --git a/IJSVGExample/IJSVGExample/test.svg b/IJSVGExample/IJSVGExample/test.svg index 2e93f67..1951576 100644 --- a/IJSVGExample/IJSVGExample/test.svg +++ b/IJSVGExample/IJSVGExample/test.svg @@ -16,21 +16,14 @@ - - - - - + + diff --git a/source/IJSVGStyleSheetSelector.m b/source/IJSVGStyleSheetSelector.m index c47bd84..f716e56 100644 --- a/source/IJSVGStyleSheetSelector.m +++ b/source/IJSVGStyleSheetSelector.m @@ -18,6 +18,18 @@ [super dealloc]; } +- (BOOL)combinatorIsGreedy:(IJSVGStyleSheetSelectorCombinator)combinator +{ + return combinator == IJSVGStyleSheetSelectorCombinatorDescendant || + combinator == IJSVGStyleSheetSelectorCombinatorPrecededSibling; +} + +- (BOOL)isAncestorOperator:(IJSVGStyleSheetSelectorCombinator)combinator +{ + return combinator == IJSVGStyleSheetSelectorCombinatorDescendant || + combinator == IJSVGStyleSheetSelectorCombinatorDirectDescendant; +} + - (IJSVGStyleSheetSelectorCombinator)combinatorForUnichar:(unichar)aChar { if(aChar == '+') @@ -35,12 +47,12 @@ { selector = [string copy]; _rawSelectors = [[NSMutableArray alloc] init]; - [self compile]; + [self _compile]; } return self; } -- (void)compile +- (void)_compile { NSUInteger length = selector.length; NSMutableArray * sels = [[[NSMutableArray alloc] init] autorelease]; @@ -148,10 +160,9 @@ } // now its compiled, we need to reverse the selectors [_rawSelectors addObjectsFromArray:[sels reverseObjectEnumerator].allObjects]; - NSLog(@"%@",_rawSelectors); } -- (IJSVGNode *)previousNode:(IJSVGNode *)node +- (IJSVGNode *)_previousNode:(IJSVGNode *)node { IJSVGGroup * group = (IJSVGGroup *)node.parentNode; if([group isKindOfClass:[IJSVGGroup class]] == NO) @@ -162,7 +173,7 @@ return group.children[currentIndex-1]; } -- (IJSVGNode *)nextNode:(IJSVGNode *)node +- (IJSVGNode *)_nextNode:(IJSVGNode *)node { IJSVGGroup * group = (IJSVGGroup *)node.parentNode; if([group isKindOfClass:[IJSVGGroup class]] == NO) @@ -173,9 +184,24 @@ return group.children[currentIndex+1]; } -- (BOOL)_matchesNode:(IJSVGNode *)node - rawSelector:(IJSVGStyleSheetSelectorRaw *)rawSelector - combinator:(IJSVGStyleSheetSelectorCombinator)combinator +- (IJSVGStyleSheetSelectorRaw *)_previousSelector:(IJSVGStyleSheetSelectorRaw *)aSelector +{ + NSInteger index = [_rawSelectors indexOfObject:aSelector]; + if(index == 0) + return nil; + return _rawSelectors[index-1]; +} + +- (IJSVGStyleSheetSelectorRaw *)_nextSelector:(IJSVGStyleSheetSelectorRaw *)aSelector +{ + NSInteger index = [_rawSelectors indexOfObject:aSelector]; + if(index == _rawSelectors.count-1) + return nil; + return _rawSelectors[index+1]; +} + +- (BOOL)_match:(IJSVGNode *)node + selector:(IJSVGStyleSheetSelectorRaw *)rawSelector { // return no if the tag is set but doesnt match the node if(rawSelector.tag != nil && [rawSelector.tag isEqualToString:node.name] == NO) @@ -194,115 +220,80 @@ [rawSelector.identifier isEqualToString:node.identifier] == NO) return NO; - // if we get here, the rest match, so we need to check any combinator... - if(combinator != IJSVGStyleSheetSelectorCombinatorDescendant) { + return YES; +} + +- (BOOL)_matches:(IJSVGNode *)aNode + selector:(IJSVGStyleSheetSelectorRaw *)rawSelector +{ + IJSVGNode * prevNode = aNode; + IJSVGStyleSheetSelectorRaw * aSelector = rawSelector; + + while(aSelector != nil) { - // the parent node must be of type group in order to actually have children - IJSVGGroup * group = (IJSVGGroup *)node.parentNode; + IJSVGNode * workingNode = nil; - // are we actually a group? - if([group isKindOfClass:[IJSVGGroup class]]) { + // for adjacent node, the content to test against + // is the previous sibling + if(rawSelector.combinator == IJSVGStyleSheetSelectorCombinatorNextSibling || + rawSelector.combinator == IJSVGStyleSheetSelectorCombinatorPrecededSibling) { + workingNode = [self _previousNode:prevNode]; + } + + // for descedant combinators and child, the element + // to test against is the parent node + else { - // work out next and previous - IJSVGNode * previousNode = [self previousNode:node]; - IJSVGNode * nextNode = [self nextNode:node]; - - // work out what to do for each combinator - switch (rawSelector.combinator) { - - // > direct decendant - case IJSVGStyleSheetSelectorCombinatorDirectDescendant: { - if([self _matchesNode:group - rawSelector:[self previousSelector:rawSelector] - combinator:IJSVGStyleSheetSelectorCombinatorDescendant]) - return YES; - break; - } - - // + next sibling - case IJSVGStyleSheetSelectorCombinatorNextSibling: { - if( previousNode.type == node.type ) - return YES; - break; - } - - // ~ previous sibling - case IJSVGStyleSheetSelectorCombinatorPrecededSibling: { - if( nextNode.type == node.type ) - return YES; - break; - } - - default: - return NO; + // find the parent + IJSVGGroup * possibleParent = (IJSVGGroup *)prevNode.parentNode; + if(possibleParent != nil) { + workingNode = possibleParent; } } - return NO; + + // no node - just kill + if(workingNode == nil) + return NO; + + // test the working node against the current selector + if([self _match:workingNode + selector:aSelector]) { + + // check for greedy + IJSVGStyleSheetSelectorRaw * nSelector = [self _nextSelector:rawSelector]; + + if([self combinatorIsGreedy:aSelector.combinator] && + nSelector.combinator != rawSelector.combinator && + (rawSelector.combinator == IJSVGStyleSheetSelectorCombinatorPrecededSibling + && [self isAncestorOperator:nSelector.combinator]) == NO) { + // just do a quick dirty check + if([self _matches:workingNode selector:rawSelector]) { + return YES; + } + } + + // get the next selector + aSelector = [self _nextSelector:aSelector]; + } else { + + // is its greedy, if we didnt match, just return NO + if([self combinatorIsGreedy:aSelector.combinator] == NO) { + return NO; + } + } + prevNode = workingNode; } return YES; } -- (IJSVGStyleSheetSelectorRaw *)previousSelector:(IJSVGStyleSheetSelectorRaw *)aSelector -{ - NSInteger index = [_rawSelectors indexOfObject:aSelector]; - if(index == 0) - return nil; - return _rawSelectors[--index]; -} - -- (IJSVGStyleSheetSelectorRaw *)nextSelector:(IJSVGStyleSheetSelectorRaw *)aSelector -{ - NSInteger index = [_rawSelectors indexOfObject:aSelector]; - if(index == _rawSelectors.count-1) - return nil; - return _rawSelectors[++index]; -} - (BOOL)matchesNode:(IJSVGNode *)node { - // grab the list of remaing selectors - IJSVGNode * checkNode = node; - for(IJSVGStyleSheetSelectorRaw * rawSelector in _rawSelectors) { - - BOOL basicMatch = [self _matchesNode:checkNode - rawSelector:rawSelector - combinator:IJSVGStyleSheetSelectorCombinatorDescendant]; - - // simple, just return NO - if(!basicMatch) - return NO; - - // requires more then just a standard descendant - if(rawSelector.combinator != IJSVGStyleSheetSelectorCombinatorDescendant) { - - basicMatch = [self _matchesNode:checkNode - rawSelector:rawSelector - combinator:rawSelector.combinator]; - if(!basicMatch) - return NO; - - } else { - - IJSVGNode * pNode = checkNode; - BOOL found = NO; - for(;;) { - pNode = pNode.parentNode; - if(pNode == nil) - return NO; - basicMatch = [self _matchesNode:checkNode - rawSelector:rawSelector - combinator:rawSelector.combinator]; - if(basicMatch) { - found = YES; - break; - } else { - return NO; - } - } - } - - } - return YES; + IJSVGStyleSheetSelectorRaw * raw = _rawSelectors[0]; + if([self _match:node selector:raw] && + ([self _matches:node selector:raw] || _rawSelectors.count == 1 )) + return YES; + return NO; } @end