From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传

---
 screendisplay/Pods/YYCategories/YYCategories/Foundation/NSDictionary+YYAdd.m |  391 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 391 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/YYCategories/YYCategories/Foundation/NSDictionary+YYAdd.m b/screendisplay/Pods/YYCategories/YYCategories/Foundation/NSDictionary+YYAdd.m
new file mode 100755
index 0000000..54a4873
--- /dev/null
+++ b/screendisplay/Pods/YYCategories/YYCategories/Foundation/NSDictionary+YYAdd.m
@@ -0,0 +1,391 @@
+//
+//  NSDictionary+YYAdd.m
+//  YYCategories <https://github.com/ibireme/YYCategories>
+//
+//  Created by ibireme on 13/4/4.
+//  Copyright (c) 2015 ibireme.
+//
+//  This source code is licensed under the MIT-style license found in the
+//  LICENSE file in the root directory of this source tree.
+//
+
+#import "NSDictionary+YYAdd.h"
+#import "NSString+YYAdd.h"
+#import "NSData+YYAdd.h"
+#import "YYCategoriesMacro.h"
+
+YYSYNTH_DUMMY_CLASS(NSDictionary_YYAdd)
+
+
+@interface _YYXMLDictionaryParser : NSObject <NSXMLParserDelegate>
+@end
+
+@implementation _YYXMLDictionaryParser {
+    NSMutableDictionary *_root;
+    NSMutableArray *_stack;
+    NSMutableString *_text;
+}
+
+- (instancetype)initWithData:(NSData *)data {
+    self = super.init;
+    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
+    [parser setDelegate:self];
+    [parser parse];
+    return self;
+}
+
+- (instancetype)initWithString:(NSString *)xml {
+    NSData *data = [xml dataUsingEncoding:NSUTF8StringEncoding];
+    return [self initWithData:data];
+}
+
+- (NSDictionary *)result {
+    return _root;
+}
+
+#pragma mark NSXMLParserDelegate
+
+#define XMLText @"_text"
+#define XMLName @"_name"
+#define XMLPref @"_"
+
+- (void)textEnd {
+    _text = _text.stringByTrim.mutableCopy;
+    if (_text.length) {
+        NSMutableDictionary *top = _stack.lastObject;
+        id existing = top[XMLText];
+        if ([existing isKindOfClass:[NSArray class]]) {
+            [existing addObject:_text];
+        } else if (existing) {
+            top[XMLText] = [@[existing, _text] mutableCopy];
+        } else {
+            top[XMLText] = _text;
+        }
+    }
+    _text = nil;
+}
+
+- (void)parser:(__unused NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(__unused NSString *)namespaceURI qualifiedName:(__unused NSString *)qName attributes:(NSDictionary *)attributeDict {
+    [self textEnd];
+    
+    NSMutableDictionary *node = [NSMutableDictionary new];
+    if (!_root) node[XMLName] = elementName;
+    if (attributeDict.count) [node addEntriesFromDictionary:attributeDict];
+    
+    if (_root) {
+        NSMutableDictionary *top = _stack.lastObject;
+        id existing = top[elementName];
+        if ([existing isKindOfClass:[NSArray class]]) {
+            [existing addObject:node];
+        } else if (existing) {
+            top[elementName] = [@[existing, node] mutableCopy];
+        } else {
+            top[elementName] = node;
+        }
+        [_stack addObject:node];
+    } else {
+        _root = node;
+        _stack = [NSMutableArray arrayWithObject:node];
+    }
+}
+
+- (void)parser:(__unused NSXMLParser *)parser didEndElement:(__unused NSString *)elementName namespaceURI:(__unused NSString *)namespaceURI qualifiedName:(__unused NSString *)qName {
+    [self textEnd];
+    
+    NSMutableDictionary *top = _stack.lastObject;
+    [_stack removeLastObject];
+    
+    NSMutableDictionary *left = top.mutableCopy;
+    [left removeObjectsForKeys:@[XMLText, XMLName]];
+    for (NSString *key in left.allKeys) {
+        [left removeObjectForKey:key];
+        if ([key hasPrefix:XMLPref]) {
+            left[[key substringFromIndex:XMLPref.length]] = top[key];
+        }
+    }
+    if (left.count) return;
+    
+    NSMutableDictionary *children = top.mutableCopy;
+    [children removeObjectsForKeys:@[XMLText, XMLName]];
+    for (NSString *key in children.allKeys) {
+        if ([key hasPrefix:XMLPref]) {
+            [children removeObjectForKey:key];
+        }
+    }
+    if (children.count) return;
+    
+    NSMutableDictionary *topNew = _stack.lastObject;
+    NSString *nodeName = top[XMLName];
+    if (!nodeName) {
+        for (NSString *name in topNew) {
+            id object = topNew[name];
+            if (object == top) {
+                nodeName = name; break;
+            } else if ([object isKindOfClass:[NSArray class]] && [object containsObject:top]) {
+                nodeName = name; break;
+            }
+        }
+    }
+    if (!nodeName) return;
+    
+    id inner = top[XMLText];
+    if ([inner isKindOfClass:[NSArray class]]) {
+        inner = [inner componentsJoinedByString:@"\n"];
+    }
+    if (!inner) return;
+    
+    id parent = topNew[nodeName];
+    if ([parent isKindOfClass:[NSArray class]]) {
+        parent[[parent count] - 1] = inner;
+    } else {
+        topNew[nodeName] = inner;
+    }
+}
+
+- (void)parser:(__unused NSXMLParser *)parser foundCharacters:(NSString *)string {
+    if (_text) [_text appendString:string];
+    else _text = [NSMutableString stringWithString:string];
+}
+
+- (void)parser:(__unused NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock {
+    NSString *string = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
+    if (_text) [_text appendString:string];
+    else _text = [NSMutableString stringWithString:string];
+}
+
+#undef XMLText
+#undef XMLName
+#undef XMLPref
+@end
+
+
+@implementation NSDictionary (YYAdd)
+
++ (NSDictionary *)dictionaryWithPlistData:(NSData *)plist {
+    if (!plist) return nil;
+    NSDictionary *dictionary = [NSPropertyListSerialization propertyListWithData:plist options:NSPropertyListImmutable format:NULL error:NULL];
+    if ([dictionary isKindOfClass:[NSDictionary class]]) return dictionary;
+    return nil;
+}
+
++ (NSDictionary *)dictionaryWithPlistString:(NSString *)plist {
+    if (!plist) return nil;
+    NSData* data = [plist dataUsingEncoding:NSUTF8StringEncoding];
+    return [self dictionaryWithPlistData:data];
+}
+
+- (NSData *)plistData {
+    return [NSPropertyListSerialization dataWithPropertyList:self format:NSPropertyListBinaryFormat_v1_0 options:kNilOptions error:NULL];
+}
+
+- (NSString *)plistString {
+    NSData *xmlData = [NSPropertyListSerialization dataWithPropertyList:self format:NSPropertyListXMLFormat_v1_0 options:kNilOptions error:NULL];
+    if (xmlData) return xmlData.utf8String;
+    return nil;
+}
+
+- (NSArray *)allKeysSorted {
+    return [[self allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
+}
+
+- (NSArray *)allValuesSortedByKeys {
+    NSArray *sortedKeys = [self allKeysSorted];
+    NSMutableArray *arr = [[NSMutableArray alloc] init];
+    for (id key in sortedKeys) {
+        [arr addObject:self[key]];
+    }
+    return arr;
+}
+
+- (BOOL)containsObjectForKey:(id)key {
+    if (!key) return NO;
+    return self[key] != nil;
+}
+
+- (NSDictionary *)entriesForKeys:(NSArray *)keys {
+    NSMutableDictionary *dic = [NSMutableDictionary new];
+    for (id key in keys) {
+        id value = self[key];
+        if (value) dic[key] = value;
+    }
+    return dic;
+}
+
+- (NSString *)jsonStringEncoded {
+    if ([NSJSONSerialization isValidJSONObject:self]) {
+        NSError *error;
+        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self options:0 error:&error];
+        NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+        return json;
+    }
+    return nil;
+}
+
+- (NSString *)jsonPrettyStringEncoded {
+    if ([NSJSONSerialization isValidJSONObject:self]) {
+        NSError *error;
+        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];
+        NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+        return json;
+    }
+    return nil;
+}
+
++ (NSDictionary *)dictionaryWithXML:(id)xml {
+    _YYXMLDictionaryParser *parser = nil;
+    if ([xml isKindOfClass:[NSString class]]) {
+        parser = [[_YYXMLDictionaryParser alloc] initWithString:xml];
+    } else if ([xml isKindOfClass:[NSData class]]) {
+        parser = [[_YYXMLDictionaryParser alloc] initWithData:xml];
+    }
+    return [parser result];
+}
+
+
+/// Get a number value from 'id'.
+static NSNumber *NSNumberFromID(id value) {
+    static NSCharacterSet *dot;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        dot = [NSCharacterSet characterSetWithRange:NSMakeRange('.', 1)];
+    });
+    if (!value || value == [NSNull null]) return nil;
+    if ([value isKindOfClass:[NSNumber class]]) return value;
+    if ([value isKindOfClass:[NSString class]]) {
+        NSString *lower = ((NSString *)value).lowercaseString;
+        if ([lower isEqualToString:@"true"] || [lower isEqualToString:@"yes"]) return @(YES);
+        if ([lower isEqualToString:@"false"] || [lower isEqualToString:@"no"]) return @(NO);
+        if ([lower isEqualToString:@"nil"] || [lower isEqualToString:@"null"]) return nil;
+        if ([(NSString *)value rangeOfCharacterFromSet:dot].location != NSNotFound) {
+            return @(((NSString *)value).doubleValue);
+        } else {
+            return @(((NSString *)value).longLongValue);
+        }
+    }
+    return nil;
+}
+
+#define RETURN_VALUE(_type_)                                                     \
+if (!key) return def;                                                            \
+id value = self[key];                                                            \
+if (!value || value == [NSNull null]) return def;                                \
+if ([value isKindOfClass:[NSNumber class]]) return ((NSNumber *)value)._type_;   \
+if ([value isKindOfClass:[NSString class]]) return NSNumberFromID(value)._type_; \
+return def;
+
+- (BOOL)boolValueForKey:(NSString *)key default:(BOOL)def {
+    RETURN_VALUE(boolValue);
+}
+
+- (char)charValueForKey:(NSString *)key default:(char)def {
+    RETURN_VALUE(charValue);
+}
+
+- (unsigned char)unsignedCharValueForKey:(NSString *)key default:(unsigned char)def {
+    RETURN_VALUE(unsignedCharValue);
+}
+
+- (short)shortValueForKey:(NSString *)key default:(short)def {
+    RETURN_VALUE(shortValue);
+}
+
+- (unsigned short)unsignedShortValueForKey:(NSString *)key default:(unsigned short)def {
+    RETURN_VALUE(unsignedShortValue);
+}
+
+- (int)intValueForKey:(NSString *)key default:(int)def {
+    RETURN_VALUE(intValue);
+}
+
+- (unsigned int)unsignedIntValueForKey:(NSString *)key default:(unsigned int)def {
+    RETURN_VALUE(unsignedIntValue);
+}
+
+- (long)longValueForKey:(NSString *)key default:(long)def {
+    RETURN_VALUE(longValue);
+}
+
+- (unsigned long)unsignedLongValueForKey:(NSString *)key default:(unsigned long)def {
+    RETURN_VALUE(unsignedLongValue);
+}
+
+- (long long)longLongValueForKey:(NSString *)key default:(long long)def {
+    RETURN_VALUE(longLongValue);
+}
+
+- (unsigned long long)unsignedLongLongValueForKey:(NSString *)key default:(unsigned long long)def {
+    RETURN_VALUE(unsignedLongLongValue);
+}
+
+- (float)floatValueForKey:(NSString *)key default:(float)def {
+    RETURN_VALUE(floatValue);
+}
+
+- (double)doubleValueForKey:(NSString *)key default:(double)def {
+    RETURN_VALUE(doubleValue);
+}
+
+- (NSInteger)integerValueForKey:(NSString *)key default:(NSInteger)def {
+    RETURN_VALUE(integerValue);
+}
+
+- (NSUInteger)unsignedIntegerValueForKey:(NSString *)key default:(NSUInteger)def {
+    RETURN_VALUE(unsignedIntegerValue);
+}
+
+- (NSNumber *)numberValueForKey:(NSString *)key default:(NSNumber *)def {
+    if (!key) return def;
+    id value = self[key];
+    if (!value || value == [NSNull null]) return def;
+    if ([value isKindOfClass:[NSNumber class]]) return value;
+    if ([value isKindOfClass:[NSString class]]) return NSNumberFromID(value);
+    return def;
+}
+
+- (NSString *)stringValueForKey:(NSString *)key default:(NSString *)def {
+    if (!key) return def;
+    id value = self[key];
+    if (!value || value == [NSNull null]) return def;
+    if ([value isKindOfClass:[NSString class]]) return value;
+    if ([value isKindOfClass:[NSNumber class]]) return ((NSNumber *)value).description;
+    return def;
+}
+
+@end
+
+
+@implementation NSMutableDictionary (YYAdd)
+
++ (NSMutableDictionary *)dictionaryWithPlistData:(NSData *)plist {
+    if (!plist) return nil;
+    NSMutableDictionary *dictionary = [NSPropertyListSerialization propertyListWithData:plist options:NSPropertyListMutableContainersAndLeaves format:NULL error:NULL];
+    if ([dictionary isKindOfClass:[NSMutableDictionary class]]) return dictionary;
+    return nil;
+}
+
++ (NSMutableDictionary *)dictionaryWithPlistString:(NSString *)plist {
+    if (!plist) return nil;
+    NSData* data = [plist dataUsingEncoding:NSUTF8StringEncoding];
+    return [self dictionaryWithPlistData:data];
+}
+
+- (id)popObjectForKey:(id)aKey {
+    if (!aKey) return nil;
+    id value = self[aKey];
+    [self removeObjectForKey:aKey];
+    return value;
+}
+
+- (NSDictionary *)popEntriesForKeys:(NSArray *)keys {
+    NSMutableDictionary *dic = [NSMutableDictionary new];
+    for (id key in keys) {
+        id value = self[key];
+        if (value) {
+            [self removeObjectForKey:key];
+            dic[key] = value;
+        }
+    }
+    return dic;
+}
+
+@end

--
Gitblit v1.8.0