marinofaggiana 4 years ago
parent
commit
b5be26262f

+ 1 - 1
Cartfile.resolved

@@ -2,7 +2,7 @@ github "Alamofire/Alamofire" "5.2.2"
 github "AssistoLab/DropDown" "v2.3.13"
 github "CocoaLumberjack/CocoaLumberjack" "3.7.0"
 github "FabrizioBrancati/Queuer" "2.1.1"
-github "SVGKit/SVGKit" "58543f3714b34ea66cfe58636d86dcbec3514ccf"
+github "SVGKit/SVGKit" "d1630b5c3771d305ed41de6c9f0f40503e1515d5"
 github "SwiftyJSON/SwiftyJSON" "5.0.0"
 github "WeTransfer/WeScan" "1.2.0"
 github "WenchaoD/FSCalendar" "2.8.0"

+ 12 - 5
Carthage/Checkouts/SVGKit/Source/DOM classes/Unported or Partial DOM/SVGElement.m

@@ -272,12 +272,19 @@
 				SVGKitLogError(@"[%@] ERROR: input file is illegal, has an item in the SVG transform attribute which has no open-bracket. Item = %@, transform attribute value = %@", [self class], transformString, value );
 				return;
 			}
-			NSString* command = [transformString substringToIndex:loc.location];
+            NSString* command = [transformString substringToIndex:loc.location];
             NSString* rawParametersString = [transformString substringFromIndex:loc.location+1];
-			NSArray* parameterStrings = [rawParametersString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];
-			
-			/** if you get ", " (comma AND space), Apple sends you an extra 0-length match - "" - between your args. We strip that here */
-			parameterStrings = [parameterStrings filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
+            NSMutableArray *parameterStrings = [NSMutableArray array];
+            NSScanner *scanner = [[NSScanner alloc] initWithString:rawParametersString];
+            CGFloat currentValue;
+
+            NSCharacterSet *commaAndWhitespace = [NSCharacterSet characterSetWithCharactersInString:@", "];
+            while (![scanner isAtEnd]) {
+                if ([scanner scanDouble:&currentValue]) {
+                    [parameterStrings addObject:[@(currentValue) stringValue]];
+                }
+                [scanner scanCharactersFromSet:commaAndWhitespace intoString:NULL];
+            }
 			
 			//EXTREME DEBUG: SVGKitLogVerbose(@"[%@] DEBUG: found parameters = %@", [self class], parameterStrings);
 			

+ 8 - 4
Carthage/Checkouts/SVGKit/Source/DOM classes/Unported or Partial DOM/SVGPathElement.m

@@ -88,19 +88,23 @@
                     } else if ([@"v" isEqualToString:command]) {
                         lastCurve = [SVGKPointsAndPathsParser readVerticalLinetoCommand:commandScanner
                                                                                    path:path
-                                                                             relativeTo:lastCurve.p];
+                                                                             relativeTo:lastCurve.p
+                                                                             isRelative:TRUE];
                     } else if ([@"V" isEqualToString:command]) {
                         lastCurve = [SVGKPointsAndPathsParser readVerticalLinetoCommand:commandScanner
                                                                                    path:path
-                                                                             relativeTo:CGPointZero];
+                                                                             relativeTo:CGPointZero
+                                                                             isRelative:FALSE];
                     } else if ([@"h" isEqualToString:command]) {
                         lastCurve = [SVGKPointsAndPathsParser readHorizontalLinetoCommand:commandScanner
                                                                                      path:path
-                                                                               relativeTo:lastCurve.p];
+                                                                               relativeTo:lastCurve.p
+                                                                               isRelative:TRUE];
                     } else if ([@"H" isEqualToString:command]) {
                         lastCurve = [SVGKPointsAndPathsParser readHorizontalLinetoCommand:commandScanner
                                                                                      path:path
-                                                                               relativeTo:CGPointZero];
+                                                                               relativeTo:CGPointZero
+                                                                               isRelative:FALSE];
                     } else if ([@"c" isEqualToString:command]) {
                         lastCurve = [SVGKPointsAndPathsParser readCurvetoCommand:commandScanner
                                                                             path:path

+ 4 - 4
Carthage/Checkouts/SVGKit/Source/Parsers/SVGKPointsAndPathsParser.h

@@ -55,10 +55,10 @@ typedef struct SVGCurve
 
 + (SVGCurve) readLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative;
 + (SVGCurve) readLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative;
-+ (SVGCurve) readVerticalLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin;
-+ (SVGCurve) readVerticalLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin;
-+ (SVGCurve) readHorizontalLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin;
-+ (SVGCurve) readHorizontalLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin;
++ (SVGCurve) readVerticalLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative;
++ (SVGCurve) readVerticalLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative;
++ (SVGCurve) readHorizontalLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative;
++ (SVGCurve) readHorizontalLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative;
 
 + (SVGCurve) readQuadraticCurvetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative;
 + (SVGCurve) readQuadraticCurvetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative;

+ 38 - 13
Carthage/Checkouts/SVGKit/Source/Parsers/SVGKPointsAndPathsParser.m

@@ -660,18 +660,31 @@ static inline CGPoint SVGCurveReflectedControlPoint(SVGCurve prevCurve)
  coordinate
  | coordinate comma-wsp? vertical-lineto-argument-sequence
  */
-+ (SVGCurve) readVerticalLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin
++ (SVGCurve) readVerticalLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative
 {
-	// FIXME: reduce the allocations here; make one CGPoint and update it, not multiple
+    // FIXME: reduce the allocations here; make one CGPoint and update it, not multiple
     CGFloat yValue;
-	[SVGKPointsAndPathsParser readCoordinate:scanner intoFloat:&yValue];
+    [SVGKPointsAndPathsParser readCoordinate:scanner intoFloat:&yValue];
     CGPoint vertCoord = CGPointMake(origin.x, origin.y+yValue);
     CGPoint currentPoint = CGPathGetCurrentPoint(path);
     CGPoint coord = CGPointMake(currentPoint.x, currentPoint.y+(vertCoord.y-currentPoint.y));
-    CGPathAddLineToPoint(path, NULL, coord.x, coord.y);
 #if DEBUG_PATH_CREATION
-	SVGKitLogWarn(@"[%@] PATH: VERTICAL LINE to (%2.2f, %2.2f)", [SVGKPointsAndPathsParser class], coord.x, coord.y );
+    SVGKitLogWarn(@"[%@] PATH: VERTICAL LINE to (%2.2f, %2.2f)", [SVGKPointsAndPathsParser class], coord.x, coord.y );
 #endif
+    CGPathAddLineToPoint(path, NULL, coord.x, coord.y);
+
+    while (![scanner isAtEnd]) {
+        origin = isRelative ? coord : origin;
+        [SVGKPointsAndPathsParser readCoordinate:scanner intoFloat:&yValue];
+        vertCoord = CGPointMake(origin.x, origin.y+yValue);
+        currentPoint = CGPathGetCurrentPoint(path);
+        coord = CGPointMake(currentPoint.x, currentPoint.y+(vertCoord.y-currentPoint.y));
+    #if DEBUG_PATH_CREATION
+        SVGKitLogWarn(@"[%@] PATH: VERTICAL LINE to (%2.2f, %2.2f)", [SVGKPointsAndPathsParser class], coord.x, coord.y );
+    #endif
+        CGPathAddLineToPoint(path, NULL, coord.x, coord.y);
+    }
+
     return SVGCurveMakePoint(coord);
 }
 
@@ -679,7 +692,7 @@ static inline CGPoint SVGCurveReflectedControlPoint(SVGCurve prevCurve)
  vertical-lineto:
  ( "V" | "v" ) wsp* vertical-lineto-argument-sequence
  */
-+ (SVGCurve) readVerticalLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin
++ (SVGCurve) readVerticalLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative
 {
 #if VERBOSE_PARSE_SVG_COMMAND_STRINGS
 	SVGKitLogVerbose(@"Parsing command string: vertical-line-to command");
@@ -693,7 +706,7 @@ static inline CGPoint SVGCurveReflectedControlPoint(SVGCurve prevCurve)
 	
     [SVGKPointsAndPathsParser readWhitespace:scanner];
     
-    return [SVGKPointsAndPathsParser readVerticalLinetoArgumentSequence:scanner path:path relativeTo:origin];
+    return [SVGKPointsAndPathsParser readVerticalLinetoArgumentSequence:scanner path:path relativeTo:origin isRelative:isRelative];
 }
 
 /**
@@ -701,19 +714,31 @@ static inline CGPoint SVGCurveReflectedControlPoint(SVGCurve prevCurve)
  coordinate
  | coordinate comma-wsp? horizontal-lineto-argument-sequence
  */
-+ (SVGCurve) readHorizontalLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin
++ (SVGCurve) readHorizontalLinetoArgumentSequence:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative
 {
 	// FIXME: reduce the allocations here; make one CGPoint and update it, not multiple
-	
     CGFloat xValue;
 	[SVGKPointsAndPathsParser readCoordinate:scanner intoFloat:&xValue];
     CGPoint horizCoord = CGPointMake(origin.x+xValue, origin.y);
     CGPoint currentPoint = CGPathGetCurrentPoint(path);
     CGPoint coord = CGPointMake(currentPoint.x+(horizCoord.x-currentPoint.x), currentPoint.y);
-    CGPathAddLineToPoint(path, NULL, coord.x, coord.y);
 #if DEBUG_PATH_CREATION
-	SVGKitLogWarn(@"[%@] PATH: HORIZONTAL LINE to (%2.2f, %2.2f)", [SVGKPointsAndPathsParser class], coord.x, coord.y );
+    SVGKitLogWarn(@"[%@] PATH: HORIZONTAL LINE to (%2.2f, %2.2f)", [SVGKPointsAndPathsParser class], coord.x, coord.y );
 #endif
+    CGPathAddLineToPoint(path, NULL, coord.x, coord.y);
+
+    while (![scanner isAtEnd]) {
+        origin = isRelative ? coord : origin;
+        [SVGKPointsAndPathsParser readCoordinate:scanner intoFloat:&xValue];
+        horizCoord = CGPointMake(origin.x+xValue, origin.y);
+        currentPoint = CGPathGetCurrentPoint(path);
+        coord = CGPointMake(currentPoint.x+(horizCoord.x-currentPoint.x), currentPoint.y);
+    #if DEBUG_PATH_CREATION
+        SVGKitLogWarn(@"[%@] PATH: HORIZONTAL LINE to (%2.2f, %2.2f)", [SVGKPointsAndPathsParser class], coord.x, coord.y );
+    #endif
+        CGPathAddLineToPoint(path, NULL, coord.x, coord.y);
+    }
+
     return SVGCurveMakePoint(coord);
 }
 
@@ -721,7 +746,7 @@ static inline CGPoint SVGCurveReflectedControlPoint(SVGCurve prevCurve)
  horizontal-lineto:
  ( "H" | "h" ) wsp* horizontal-lineto-argument-sequence
  */
-+ (SVGCurve) readHorizontalLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin
++ (SVGCurve) readHorizontalLinetoCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin isRelative:(BOOL) isRelative
 {
 #if VERBOSE_PARSE_SVG_COMMAND_STRINGS
 	SVGKitLogVerbose(@"Parsing command string: horizontal-line-to command");
@@ -737,7 +762,7 @@ static inline CGPoint SVGCurveReflectedControlPoint(SVGCurve prevCurve)
 	
     [SVGKPointsAndPathsParser readWhitespace:scanner];
     
-    return [SVGKPointsAndPathsParser readHorizontalLinetoArgumentSequence:scanner path:path relativeTo:origin];
+    return [SVGKPointsAndPathsParser readHorizontalLinetoArgumentSequence:scanner path:path relativeTo:origin isRelative:isRelative];
 }
 
 + (SVGCurve) readCloseCommand:(NSScanner*)scanner path:(CGMutablePathRef)path relativeTo:(CGPoint)origin

+ 1 - 1
iOSClient/Favorites/NCFavorite.swift

@@ -111,7 +111,7 @@ class NCFavorite: NCCollectionViewCommon  {
                 
                 self.refreshControl.endRefreshing()
                 self.isReloadDataSourceNetworkInProgress = false
-                if metadatasUpdate?.count ?? 0 > 0 {
+                if metadatasUpdate?.count ?? 0 > 0 || forced {
                     self.reloadDataSource()
                 } else {
                     self.collectionView?.reloadData()

+ 1 - 1
iOSClient/Files/NCFiles.swift

@@ -109,7 +109,7 @@ class NCFiles: NCCollectionViewCommon  {
             
             self.refreshControl.endRefreshing()
             self.isReloadDataSourceNetworkInProgress = false
-            if metadatasUpdate?.count ?? 0 > 0 {
+            if metadatasUpdate?.count ?? 0 > 0 || forced {
                 self.reloadDataSource()
             } else {
                 self.collectionView?.reloadData()

+ 1 - 1
iOSClient/Offline/NCOffline.swift

@@ -110,7 +110,7 @@ class NCOffline: NCCollectionViewCommon  {
                 
                 self.refreshControl.endRefreshing()
                 self.isReloadDataSourceNetworkInProgress = false
-                if metadatasUpdate?.count ?? 0 > 0 {
+                if metadatasUpdate?.count ?? 0 > 0 || forced {
                     self.reloadDataSource()
                 } else {
                     self.collectionView?.reloadData()