From 83b9d5c682b21d88133f24da0f94dd56bd79e687 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 19 Jul 2018 13:38:55 +0800
Subject: [PATCH] change

---
 screendisplay/Pods/YYText/YYText/Utility/YYTextUtilities.m |  309 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 309 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/YYText/YYText/Utility/YYTextUtilities.m b/screendisplay/Pods/YYText/YYText/Utility/YYTextUtilities.m
new file mode 100755
index 0000000..11eaefe
--- /dev/null
+++ b/screendisplay/Pods/YYText/YYText/Utility/YYTextUtilities.m
@@ -0,0 +1,309 @@
+//
+//  YYTextUtilities.m
+//  YYText <https://github.com/ibireme/YYText>
+//
+//  Created by ibireme on 15/4/6.
+//  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 "YYTextUtilities.h"
+#import <Accelerate/Accelerate.h>
+#import "UIView+YYText.h"
+
+NSCharacterSet *YYTextVerticalFormRotateCharacterSet() {
+    static NSMutableCharacterSet *set;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        set = [NSMutableCharacterSet new];
+        [set addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo
+        [set addCharactersInRange:NSMakeRange(0x2460, 160)]; // Enclosed Alphanumerics
+        [set addCharactersInRange:NSMakeRange(0x2600, 256)]; // Miscellaneous Symbols
+        [set addCharactersInRange:NSMakeRange(0x2700, 192)]; // Dingbats
+        [set addCharactersInRange:NSMakeRange(0x2E80, 128)]; // CJK Radicals Supplement
+        [set addCharactersInRange:NSMakeRange(0x2F00, 224)]; // Kangxi Radicals
+        [set addCharactersInRange:NSMakeRange(0x2FF0, 16)]; // Ideographic Description Characters
+        [set addCharactersInRange:NSMakeRange(0x3000, 64)]; // CJK Symbols and Punctuation
+        [set removeCharactersInRange:NSMakeRange(0x3008, 10)];
+        [set removeCharactersInRange:NSMakeRange(0x3014, 12)];
+        [set addCharactersInRange:NSMakeRange(0x3040, 96)]; // Hiragana
+        [set addCharactersInRange:NSMakeRange(0x30A0, 96)]; // Katakana
+        [set addCharactersInRange:NSMakeRange(0x3100, 48)]; // Bopomofo
+        [set addCharactersInRange:NSMakeRange(0x3130, 96)]; // Hangul Compatibility Jamo
+        [set addCharactersInRange:NSMakeRange(0x3190, 16)]; // Kanbun
+        [set addCharactersInRange:NSMakeRange(0x31A0, 32)]; // Bopomofo Extended
+        [set addCharactersInRange:NSMakeRange(0x31C0, 48)]; // CJK Strokes
+        [set addCharactersInRange:NSMakeRange(0x31F0, 16)]; // Katakana Phonetic Extensions
+        [set addCharactersInRange:NSMakeRange(0x3200, 256)]; // Enclosed CJK Letters and Months
+        [set addCharactersInRange:NSMakeRange(0x3300, 256)]; // CJK Compatibility
+        [set addCharactersInRange:NSMakeRange(0x3400, 2582)]; // CJK Unified Ideographs Extension A
+        [set addCharactersInRange:NSMakeRange(0x4E00, 20941)]; // CJK Unified Ideographs
+        [set addCharactersInRange:NSMakeRange(0xAC00, 11172)]; // Hangul Syllables
+        [set addCharactersInRange:NSMakeRange(0xD7B0, 80)]; // Hangul Jamo Extended-B
+        [set addCharactersInString:@"���"]; // U+F8FF (Private Use Area)
+        [set addCharactersInRange:NSMakeRange(0xF900, 512)]; // CJK Compatibility Ideographs
+        [set addCharactersInRange:NSMakeRange(0xFE10, 16)]; // Vertical Forms
+        [set addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Halfwidth and Fullwidth Forms
+        [set addCharactersInRange:NSMakeRange(0x1F200, 256)]; // Enclosed Ideographic Supplement
+        [set addCharactersInRange:NSMakeRange(0x1F300, 768)]; // Enclosed Ideographic Supplement
+        [set addCharactersInRange:NSMakeRange(0x1F600, 80)]; // Emoticons (Emoji)
+        [set addCharactersInRange:NSMakeRange(0x1F680, 128)]; // Transport and Map Symbols
+        
+        // See http://unicode-table.com/ for more information.
+    });
+    return set;
+}
+
+NSCharacterSet *YYTextVerticalFormRotateAndMoveCharacterSet() {
+    static NSMutableCharacterSet *set;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        set = [NSMutableCharacterSet new];
+        [set addCharactersInString:@"������������"];
+    });
+    return set;
+}
+
+// return 0 when succeed
+static int matrix_invert(__CLPK_integer N, double *matrix) {
+    __CLPK_integer error = 0;
+    __CLPK_integer pivot_tmp[6 * 6];
+    __CLPK_integer *pivot = pivot_tmp;
+    double workspace_tmp[6 * 6];
+    double *workspace = workspace_tmp;
+    bool need_free = false;
+    
+    if (N > 6) {
+        need_free = true;
+        pivot = malloc(N * N * sizeof(__CLPK_integer));
+        if (!pivot) return -1;
+        workspace = malloc(N * sizeof(double));
+        if (!workspace) {
+            free(pivot);
+            return -1;
+        }
+    }
+    
+    dgetrf_(&N, &N, matrix, &N, pivot, &error);
+    
+    if (error == 0) {
+        dgetri_(&N, matrix, &N, pivot, workspace, &N, &error);
+    }
+    
+    if (need_free) {
+        free(pivot);
+        free(workspace);
+    }
+    return error;
+}
+
+CGAffineTransform YYTextCGAffineTransformGetFromPoints(CGPoint before[3], CGPoint after[3]) {
+    if (before == NULL || after == NULL) return CGAffineTransformIdentity;
+    
+    CGPoint p1, p2, p3, q1, q2, q3;
+    p1 = before[0]; p2 = before[1]; p3 = before[2];
+    q1 =  after[0]; q2 =  after[1]; q3 =  after[2];
+    
+    double A[36];
+    A[ 0] = p1.x; A[ 1] = p1.y; A[ 2] = 0; A[ 3] = 0; A[ 4] = 1; A[ 5] = 0;
+    A[ 6] = 0; A[ 7] = 0; A[ 8] = p1.x; A[ 9] = p1.y; A[10] = 0; A[11] = 1;
+    A[12] = p2.x; A[13] = p2.y; A[14] = 0; A[15] = 0; A[16] = 1; A[17] = 0;
+    A[18] = 0; A[19] = 0; A[20] = p2.x; A[21] = p2.y; A[22] = 0; A[23] = 1;
+    A[24] = p3.x; A[25] = p3.y; A[26] = 0; A[27] = 0; A[28] = 1; A[29] = 0;
+    A[30] = 0; A[31] = 0; A[32] = p3.x; A[33] = p3.y; A[34] = 0; A[35] = 1;
+    
+    int error = matrix_invert(6, A);
+    if (error) return CGAffineTransformIdentity;
+    
+    double B[6];
+    B[0] = q1.x; B[1] = q1.y; B[2] = q2.x; B[3] = q2.y; B[4] = q3.x; B[5] = q3.y;
+    
+    double M[6];
+    M[0] = A[ 0] * B[0] + A[ 1] * B[1] + A[ 2] * B[2] + A[ 3] * B[3] + A[ 4] * B[4] + A[ 5] * B[5];
+    M[1] = A[ 6] * B[0] + A[ 7] * B[1] + A[ 8] * B[2] + A[ 9] * B[3] + A[10] * B[4] + A[11] * B[5];
+    M[2] = A[12] * B[0] + A[13] * B[1] + A[14] * B[2] + A[15] * B[3] + A[16] * B[4] + A[17] * B[5];
+    M[3] = A[18] * B[0] + A[19] * B[1] + A[20] * B[2] + A[21] * B[3] + A[22] * B[4] + A[23] * B[5];
+    M[4] = A[24] * B[0] + A[25] * B[1] + A[26] * B[2] + A[27] * B[3] + A[28] * B[4] + A[29] * B[5];
+    M[5] = A[30] * B[0] + A[31] * B[1] + A[32] * B[2] + A[33] * B[3] + A[34] * B[4] + A[35] * B[5];
+    
+    CGAffineTransform transform = CGAffineTransformMake(M[0], M[2], M[1], M[3], M[4], M[5]);
+    return transform;
+}
+
+CGAffineTransform YYTextCGAffineTransformGetFromViews(UIView *from, UIView *to) {
+    if (!from || !to) return CGAffineTransformIdentity;
+    
+    CGPoint before[3], after[3];
+    before[0] = CGPointMake(0, 0);
+    before[1] = CGPointMake(0, 1);
+    before[2] = CGPointMake(1, 0);
+    after[0] = [from yy_convertPoint:before[0] toViewOrWindow:to];
+    after[1] = [from yy_convertPoint:before[1] toViewOrWindow:to];
+    after[2] = [from yy_convertPoint:before[2] toViewOrWindow:to];
+    
+    return YYTextCGAffineTransformGetFromPoints(before, after);
+}
+
+UIViewContentMode YYTextCAGravityToUIViewContentMode(NSString *gravity) {
+    static NSDictionary *dic;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        dic = @{ kCAGravityCenter:@(UIViewContentModeCenter),
+                 kCAGravityTop:@(UIViewContentModeTop),
+                 kCAGravityBottom:@(UIViewContentModeBottom),
+                 kCAGravityLeft:@(UIViewContentModeLeft),
+                 kCAGravityRight:@(UIViewContentModeRight),
+                 kCAGravityTopLeft:@(UIViewContentModeTopLeft),
+                 kCAGravityTopRight:@(UIViewContentModeTopRight),
+                 kCAGravityBottomLeft:@(UIViewContentModeBottomLeft),
+                 kCAGravityBottomRight:@(UIViewContentModeBottomRight),
+                 kCAGravityResize:@(UIViewContentModeScaleToFill),
+                 kCAGravityResizeAspect:@(UIViewContentModeScaleAspectFit),
+                 kCAGravityResizeAspectFill:@(UIViewContentModeScaleAspectFill) };
+    });
+    if (!gravity) return UIViewContentModeScaleToFill;
+    return (UIViewContentMode)((NSNumber *)dic[gravity]).integerValue;
+}
+
+NSString *YYTextUIViewContentModeToCAGravity(UIViewContentMode contentMode) {
+    switch (contentMode) {
+        case UIViewContentModeScaleToFill: return kCAGravityResize;
+        case UIViewContentModeScaleAspectFit: return kCAGravityResizeAspect;
+        case UIViewContentModeScaleAspectFill: return kCAGravityResizeAspectFill;
+        case UIViewContentModeRedraw: return kCAGravityResize;
+        case UIViewContentModeCenter: return kCAGravityCenter;
+        case UIViewContentModeTop: return kCAGravityTop;
+        case UIViewContentModeBottom: return kCAGravityBottom;
+        case UIViewContentModeLeft: return kCAGravityLeft;
+        case UIViewContentModeRight: return kCAGravityRight;
+        case UIViewContentModeTopLeft: return kCAGravityTopLeft;
+        case UIViewContentModeTopRight: return kCAGravityTopRight;
+        case UIViewContentModeBottomLeft: return kCAGravityBottomLeft;
+        case UIViewContentModeBottomRight: return kCAGravityBottomRight;
+        default: return kCAGravityResize;
+    }
+}
+
+CGRect YYTextCGRectFitWithContentMode(CGRect rect, CGSize size, UIViewContentMode mode) {
+    rect = CGRectStandardize(rect);
+    size.width = size.width < 0 ? -size.width : size.width;
+    size.height = size.height < 0 ? -size.height : size.height;
+    CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
+    switch (mode) {
+        case UIViewContentModeScaleAspectFit:
+        case UIViewContentModeScaleAspectFill: {
+            if (rect.size.width < 0.01 || rect.size.height < 0.01 ||
+                size.width < 0.01 || size.height < 0.01) {
+                rect.origin = center;
+                rect.size = CGSizeZero;
+            } else {
+                CGFloat scale;
+                if (mode == UIViewContentModeScaleAspectFit) {
+                    if (size.width / size.height < rect.size.width / rect.size.height) {
+                        scale = rect.size.height / size.height;
+                    } else {
+                        scale = rect.size.width / size.width;
+                    }
+                } else {
+                    if (size.width / size.height < rect.size.width / rect.size.height) {
+                        scale = rect.size.width / size.width;
+                    } else {
+                        scale = rect.size.height / size.height;
+                    }
+                }
+                size.width *= scale;
+                size.height *= scale;
+                rect.size = size;
+                rect.origin = CGPointMake(center.x - size.width * 0.5, center.y - size.height * 0.5);
+            }
+        } break;
+        case UIViewContentModeCenter: {
+            rect.size = size;
+            rect.origin = CGPointMake(center.x - size.width * 0.5, center.y - size.height * 0.5);
+        } break;
+        case UIViewContentModeTop: {
+            rect.origin.x = center.x - size.width * 0.5;
+            rect.size = size;
+        } break;
+        case UIViewContentModeBottom: {
+            rect.origin.x = center.x - size.width * 0.5;
+            rect.origin.y += rect.size.height - size.height;
+            rect.size = size;
+        } break;
+        case UIViewContentModeLeft: {
+            rect.origin.y = center.y - size.height * 0.5;
+            rect.size = size;
+        } break;
+        case UIViewContentModeRight: {
+            rect.origin.y = center.y - size.height * 0.5;
+            rect.origin.x += rect.size.width - size.width;
+            rect.size = size;
+        } break;
+        case UIViewContentModeTopLeft: {
+            rect.size = size;
+        } break;
+        case UIViewContentModeTopRight: {
+            rect.origin.x += rect.size.width - size.width;
+            rect.size = size;
+        } break;
+        case UIViewContentModeBottomLeft: {
+            rect.origin.y += rect.size.height - size.height;
+            rect.size = size;
+        } break;
+        case UIViewContentModeBottomRight: {
+            rect.origin.x += rect.size.width - size.width;
+            rect.origin.y += rect.size.height - size.height;
+            rect.size = size;
+        } break;
+        case UIViewContentModeScaleToFill:
+        case UIViewContentModeRedraw:
+        default: {
+            rect = rect;
+        }
+    }
+    return rect;
+}
+
+CGFloat YYTextScreenScale() {
+    static CGFloat scale;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        scale = [UIScreen mainScreen].scale;
+    });
+    return scale;
+}
+
+CGSize YYTextScreenSize() {
+    static CGSize size;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        size = [UIScreen mainScreen].bounds.size;
+        if (size.height < size.width) {
+            CGFloat tmp = size.height;
+            size.height = size.width;
+            size.width = tmp;
+        }
+    });
+    return size;
+}
+
+
+BOOL YYTextIsAppExtension() {
+    static BOOL isAppExtension = NO;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        Class cls = NSClassFromString(@"UIApplication");
+        if(!cls || ![cls respondsToSelector:@selector(sharedApplication)]) isAppExtension = YES;
+        if ([[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]) isAppExtension = YES;
+    });
+    return isAppExtension;
+}
+
+UIApplication *YYTextSharedApplication() {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wundeclared-selector"
+    return YYTextIsAppExtension() ? nil : [UIApplication performSelector:@selector(sharedApplication)];
+#pragma clang diagnostic pop
+}

--
Gitblit v1.8.0