Răsfoiți Sursa

170109
debuting memory leak

Ray Zhang 9 ani în urmă
părinte
comite
5ae1aca13a

+ 0 - 1
RedAnt ERP Mobile/common/PDFUtils.h

@@ -17,5 +17,4 @@
 +(NSString*)SavePDF:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef )document window_rect:(CGRect)window_rect;
 +(NSMutableDictionary*) loadControl:(NSString*)templateName;
 
-+(void) leak_test:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef* )document window_rect:(CGRect)window_rect;
 @end

+ 26 - 90
RedAnt ERP Mobile/common/PDFUtils.m

@@ -175,70 +175,8 @@
     return CGRectMake(x, y, width, height);
     
 }
-+(void) leak_test:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef* )document window_rect:(CGRect)window_rect
-{
-    
-    
 
-    //获取路径
-    
-    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//坐标
-    
-    NSString *saveDirectory=[paths objectAtIndex:0];
-    
-    NSString *saveFileName=[NSString stringWithFormat:@"%@.pdf",[[NSUUID UUID ] UUIDString] ] ;;
-    
-    NSString *newFilePath=[saveDirectory stringByAppendingPathComponent:saveFileName];
-    
-    
-    
-    
-    const char *filename=[newFilePath UTF8String];
-    
-    
-    CFStringRef path;
-    
-    CFURLRef url;
-    
-    path=CFStringCreateWithCString(NULL, filename, kCFStringEncodingUTF8);
-    
-    url=CFURLCreateWithFileSystemPath(NULL, path, kCFURLPOSIXPathStyle, 0);
-    
-    CFBridgingRelease(path);
 
-    
-    
-    CGContextRef pdfContext;
-    CGRect docsize = CGRectMake(0, 0, 612, 1008);
-    
-    
-    
-    
-    CFMutableDictionaryRef myDictionary = NULL;
-    myDictionary= CFDictionaryCreateMutable(NULL,
-                                            0,
-                                            &kCFTypeDictionaryKeyCallBacks,
-                                            &kCFTypeDictionaryValueCallBacks);
-
-    
-    //如果注释掉这行就不会有问题
-//    CFDictionarySetValue(myDictionary, kCGPDFContextOwnerPassword, CFSTR("12345"));
-
-    
-    CFDictionarySetValue(myDictionary, kCGPDFContextAllowsPrinting, kCFBooleanTrue);
-    CFDictionarySetValue(myDictionary, kCGPDFContextAllowsCopying, kCFBooleanFalse);
-    
-    pdfContext=CGPDFContextCreateWithURL(url, &docsize,myDictionary);
-    
-    CFRelease(myDictionary);
-    CFBridgingRelease(url);
-    CGPDFContextClose(pdfContext);
-
-
-    
-    CGContextRelease(pdfContext);
-    
-}
 +(NSString*)SavePDF:(NSMutableDictionary*) controlTemplate source:(CGPDFDocumentRef )document window_rect:(CGRect)window_rect
 {
     
@@ -298,31 +236,31 @@
     
     
     
+//    
+//    CFMutableDictionaryRef myDictionary = NULL;
+//    myDictionary= CFDictionaryCreateMutable(NULL,
+//                                            0,
+//                                            &kCFTypeDictionaryKeyCallBacks,
+//                                            &kCFTypeDictionaryValueCallBacks);
+//    //    CFDictionarySetValue(myDictionary,
+//    //                         kCGPDFContextTitle,
+//    //                         CFSTR("Photo from iPrivate Album"));
+//    //    CFDictionarySetValue(myDictionary,
+//    //                         kCGPDFContextCreator,
+//    //                         CFSTR("iPrivate Album"));
+//    
+//    //    //设置文档名称
+//    //    CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
+//    //    //设置创建者
+//    //    CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
+//    //设置文档尺寸
+//    CFDictionarySetValue(myDictionary, kCGPDFContextOwnerPassword, CFSTR("usai2010"));
+//    CFDictionarySetValue(myDictionary, kCGPDFContextAllowsPrinting, kCFBooleanTrue);
+//    CFDictionarySetValue(myDictionary, kCGPDFContextAllowsCopying, kCFBooleanFalse);
+//    
+//    
     
-    CFMutableDictionaryRef myDictionary = NULL;
-    myDictionary= CFDictionaryCreateMutable(NULL,
-                                            0,
-                                            &kCFTypeDictionaryKeyCallBacks,
-                                            &kCFTypeDictionaryValueCallBacks);
-    //    CFDictionarySetValue(myDictionary,
-    //                         kCGPDFContextTitle,
-    //                         CFSTR("Photo from iPrivate Album"));
-    //    CFDictionarySetValue(myDictionary,
-    //                         kCGPDFContextCreator,
-    //                         CFSTR("iPrivate Album"));
-    
-    //    //设置文档名称
-    //    CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
-    //    //设置创建者
-    //    CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
-    //设置文档尺寸
-    CFDictionarySetValue(myDictionary, kCGPDFContextOwnerPassword, CFSTR("usai2010"));
-    CFDictionarySetValue(myDictionary, kCGPDFContextAllowsPrinting, kCFBooleanTrue);
-    CFDictionarySetValue(myDictionary, kCGPDFContextAllowsCopying, kCFBooleanFalse);
-    
-    
-    
-    pdfContext=CGPDFContextCreateWithURL(url, &docsize,NULL);
+    pdfContext=CGPDFContextCreateWithURL(url, &docsize,nil);
     
     
     
@@ -376,10 +314,9 @@
                     size=@"10";
                 NSString* textAlignment=control[@"textAlignment"];
                 if(textAlignment.length==0)
-                    textAlignment = @"Middle";
+                    textAlignment = @"Left";
                 double margin_left = [control[@"margin_left"] doubleValue];
                 
-            
                 
                 control_drawable=[[TextDrawable alloc] init:[self WindowRect2PDFRect:control_rect pdf_rect:papersize window_size:window_rect.size] source_type:@"const" source:value textAlignment:textAlignment vAlign:@"middle" size:size];
                 
@@ -424,7 +361,6 @@
                 //                control_drawable=[[TextDrawable alloc] init:[self WindowRect2PDFRect:control_rect pdf_rect:papersize window_size:window_rect.size] source_type:@"const" source:value textAlignment:@"center" vAlign:@"middle" size:size];
             }
             if(control_drawable)
-//                for(int l=0;l<1000;l++)
                     [pdfPage DirectDraw:pdfContext drawable:control_drawable];
             
             
@@ -450,7 +386,7 @@
         //        CFBridgingRelease(page);
     }
     CGContextRelease(pdfContext);
-    CFRelease(myDictionary);
+//    CFRelease(myDictionary);
     CFBridgingRelease(url);
     
     //  CFRelease(cfpdfAttributes);

+ 821 - 26
RedAnt ERP Mobile/common/pdfCreator/TextDrawable.m

@@ -33,10 +33,10 @@
 +(NSMutableDictionary *) createTextTemplate:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source textAlignment:(NSString*)textAlignment vAlign:(NSString*)vAlign size:(NSString*)size
 {
     
-
     
     
     
+    NSLog(@"createTextTemplate text align : %@",textAlignment);
     
     if(textAlignment.length==0)
         textAlignment= @"Center";
@@ -44,7 +44,7 @@
         vAlign= @"Middle";
     if(size.length==0)
         vAlign= @"10";
-
+    
     
     
     NSMutableDictionary* ret=[super createDrawableTemplate:rect];
@@ -69,6 +69,8 @@
     
     
     NSString* align= drawableTemplate[@"textAlignment"];
+    
+        NSLog(@"setDrawableTemplate text align : %@",align);
     if(align.length==0 || [align.lowercaseString isEqualToString:@"left"])
     {
         self.textalignment= kCTTextAlignmentLeft;
@@ -86,8 +88,8 @@
         self.textalignment= kCTTextAlignmentLeft;
     }
     
-//    self.lineSpace = 0;
-//    self.paragraphSpace = 0;
+    self.lineSpace = 0;
+    self.paragraphSpace = 0;
     
     
     NSString* colorvalue=drawableTemplate[@"color"];
@@ -119,12 +121,12 @@
 -(CGRect) Query_Rect:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
 {
     
-            bool expand=[self.drawableTemplate[@"expand"] boolValue];
+    bool expand=[self.drawableTemplate[@"expand"] boolValue];
     if(!expand)
     {
-    CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
-    
-    return parentrect;
+        CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
+        
+        return parentrect;
     }
     else
     {
@@ -185,10 +187,10 @@
         
         
         
-//        if([self.text isEqualToString:@"www.newpacificdirect.com"])
-//        {
-//            int debug=0;
-//        }
+        //        if([self.text isEqualToString:@"www.newpacificdirect.com"])
+        //        {
+        //            int debug=0;
+        //        }
         
         
         bool bold = [self.drawableTemplate[@"bold"] boolValue];
@@ -313,7 +315,7 @@
         
         CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
         
-
+        
         double height =0;
         if(tmpSize.height<parentrect.size.height)
             height=tmpSize.height;
@@ -352,19 +354,19 @@
         //    //    CGContextClearRect(context, self.rect);
         //    //    CGContextSetFillColorWithColor(context, [[UIColor whiteColor]CGColor]);
         //    //    CGContextFillRect(context, CGRectMake(0, 0, self.rect.size.width, self.rect.size.height));
-        //    
-        //    
+        //
+        //
         //    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
         //    //   CGContextTranslateCTM(context, 0, self.rect.size.height);
         //    //   CGContextScaleCTM(context, 1.0, -1.0);
-        //    
+        //
         //    // draw
         //    CTFrameDraw(leftFrame, context);
-        //    
-        //    
+        //
+        //
         //    CFRelease(leftFrame);
         //    // cleanup
-        //    
+        //
         //    CGPathRelease(leftColumnPath);
         CFRelease(framesetter);
         
@@ -412,7 +414,7 @@
     CTFontDescriptorRef descriptor =
     CTFontDescriptorCreateWithAttributes(cffontAttributes);
     
- //      CFBridgingRelease(cffontAttributes);
+    //      CFBridgingRelease(cffontAttributes);
     
     // Create a font using the descriptor.
     CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, 0.0, NULL);
@@ -591,10 +593,10 @@
     
     
     
-//    if([self.text isEqualToString:@"www.newpacificdirect.com"])
-//    {
-//        int debug=0;
-//    }
+    //    if([self.text isEqualToString:@"www.newpacificdirect.com"])
+    //    {
+    //        int debug=0;
+    //    }
     
     
     bool bold = [self.drawableTemplate[@"bold"] boolValue];
@@ -615,7 +617,7 @@
     //
     //    }
     //    else
-    
+    {
         string=[[NSMutableAttributedString alloc] initWithString:self.text];
         //创建字体以及字体大小
         //        CTFontRef ctfont = [self CreateFont:font size:fontsize bold:bold];//CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
@@ -690,7 +692,7 @@
                        value:CFBridgingRelease(paragraphStyle)
                        range:NSMakeRange(0, [string length])];
         
-    
+    }
     
     
     
@@ -788,3 +790,796 @@
 
 
 @end
+
+
+
+////
+////  TextDrawable.m
+////  pdftest
+////
+////  Created by Ray on 10/12/16.
+////  Copyright © 2016 United Software Applications, Inc. All rights reserved.
+////
+//
+//#import "TextDrawable.h"
+//#import <CoreText/CoreText.h>
+//#import "TextUtils.h"
+//
+//@implementation TextDrawable
+//
+//
+//-(instancetype) init:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source textAlignment:(NSString*)textAlignment vAlign:(NSString*)vAlign size:(NSString*)size
+//{
+//    
+//    if (self = [super init]) {
+//        //        NSMutableDictionary* m1=[drawableTemplate mutableCopy];
+//        //        NSMutableDictionary* m2=[drawableTemplate mutableCopy];
+//        //        [self setDrawableTemplate:[[RAUtils string2dict:[RAUtils dict2string:drawableTemplate]]  mutableCopy] ];
+//        
+//        NSMutableDictionary * drawableTemplate = [TextDrawable createTextTemplate:rect source_type:source_type source:source textAlignment:textAlignment vAlign:vAlign size:size];
+//        
+//        
+//        [self setDrawableTemplate:[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:drawableTemplate]] ];
+//        
+//    }
+//    return self;
+//    
+//}
+//+(NSMutableDictionary *) createTextTemplate:(CGRect) rect source_type:(NSString*) source_type source:(NSString*)source textAlignment:(NSString*)textAlignment vAlign:(NSString*)vAlign size:(NSString*)size
+//{
+//    
+//
+//    
+//    
+//    
+//    
+//    if(textAlignment.length==0)
+//        textAlignment= @"Center";
+//    if(vAlign.length==0)
+//        vAlign= @"Middle";
+//    if(size.length==0)
+//        vAlign= @"10";
+//
+//    
+//    
+//    NSMutableDictionary* ret=[super createDrawableTemplate:rect];
+//    
+//    ret[@"type"]=@"text" ;
+//    ret[@"source_type"]=source_type ;
+//    ret[@"source"]=source ;
+//    ret[@"text"]=source ;
+//    ret[@"textAlignment"]=textAlignment ;
+//    ret[@"vAlign"]=vAlign ;
+//    ret[@"size"]=size ;
+//    
+//    return ret;
+//}
+//
+//
+//-(void) setDrawableTemplate:(NSMutableDictionary *)drawableTemplate
+//{
+//    
+//    [super setDrawableTemplate:drawableTemplate];
+//    
+//    
+//    
+//    NSString* align= drawableTemplate[@"textAlignment"];
+//    if(align.length==0 || [align.lowercaseString isEqualToString:@"left"])
+//    {
+//        self.textalignment= kCTTextAlignmentLeft;
+//    }
+//    else if([align.lowercaseString isEqualToString:@"right"])
+//    {
+//        self.textalignment= kCTTextAlignmentRight;
+//    }
+//    else if([align.lowercaseString isEqualToString:@"center"])
+//    {
+//        self.textalignment= kCTTextAlignmentCenter;
+//    }
+//    else
+//    {
+//        self.textalignment= kCTTextAlignmentLeft;
+//    }
+//    
+////    self.lineSpace = 0;
+////    self.paragraphSpace = 0;
+//    
+//    
+//    NSString* colorvalue=drawableTemplate[@"color"];
+//    if(colorvalue.length>0 )
+//    {
+//        unsigned long color = strtoul([colorvalue UTF8String],0,16);
+//        self.textColor= UIColorFromRGB(color);
+//    }
+//    else
+//    {
+//        self.textColor= [UIColor blackColor];
+//        
+//    }
+//    
+//    
+//    //    kCTTextAlignmentJustified CT_ENUM_AVAILABLE(10_8, 6_0) = 3,
+//    //    kCTTextAlignmentNatural   CT_ENUM_AVAILABLE(10_8, 6_0) = 4,
+//    
+//    
+//    //    _drawableTemplate = drawableTemplate;
+//    //    self.margin_left=[self.drawableTemplate[@"margin_left"] doubleValue];
+//    //    self.margin_right=[self.drawableTemplate[@"margin_right"] doubleValue];
+//    //    self.margin_top=[self.drawableTemplate[@"margin_top"] doubleValue];
+//    //    self.margin_bottom=[self.drawableTemplate[@"margin_bottom"] doubleValue];
+//    //    self.rect = CGRectMake(0, 0, [self.drawableTemplate[@"width"] doubleValue], [self.drawableTemplate[@"height"] doubleValue]);
+//}
+//
+//
+//-(CGRect) Query_Rect:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
+//{
+//    
+//            bool expand=[self.drawableTemplate[@"expand"] boolValue];
+//    if(!expand)
+//    {
+//    CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
+//    
+//    return parentrect;
+//    }
+//    else
+//    {
+//        
+//        
+//        
+//        
+//        NSString * source=self.drawableTemplate[@"source_type"];
+//        if(source==nil)
+//            source=@"const";
+//        if([source isEqualToString:@"const"])
+//        {
+//            self.text=self.drawableTemplate[@"text"];
+//            //  self.text=[self.text stringByReplacingOccurrencesOfString:@"\r\n" withString:@"<br>"];
+//            
+//        }
+//        else if([source isEqualToString:@"data"])
+//        {
+//            if([self.drawableTemplate[@"source_isexpression"] boolValue])
+//            {
+//                NSString *content =  data[self.drawableTemplate[@"source"]];
+//                NSString *pattern = @"\\$\\.\\{([\\s\\S]*?)\\}\\.\\$";
+//                NSArray* matches=[TextUtils expression_varable:content regex:pattern];
+//                //            if (matches) {
+//                //                for (NSTextCheckingResult *match in matches) {
+//                //                    for (int i = 0; i < match.numberOfRanges; ++i) {
+//                //                        DebugLog(@"%d-> %@",i, [content substringWithRange:[match rangeAtIndex:i]]);
+//                //                    }
+//                //                }
+//                //            }
+//                if (matches)
+//                {
+//                    self.text=content;
+//                    for (NSTextCheckingResult *match in matches)
+//                    {
+//                        
+//                        for (int i = 0; i < match.numberOfRanges/2; ++i) {
+//                            DebugLog(@"%d-> %@",i, [content substringWithRange:[match rangeAtIndex:i]]);
+//                            DebugLog(@"%d-> %@",i+1, [content substringWithRange:[match rangeAtIndex:i+1]]);
+//                            
+//                            self.text=[self.text stringByReplacingOccurrencesOfString:[content substringWithRange:[match rangeAtIndex:i]] withString:[NSString stringWithFormat:@"%@",data[[content substringWithRange:[match rangeAtIndex:i+1]]]]];
+//                        }
+//                    }
+//                }
+//                //self.text=content;
+//                
+//            }
+//            else
+//            {
+//                self.text=data[self.drawableTemplate[@"source"]];
+//            }
+//        }
+//        
+//        if(self.text==nil)
+//            self.text=@"";
+//        
+//        
+//        
+//        
+//        
+////        if([self.text isEqualToString:@"www.newpacificdirect.com"])
+////        {
+////            int debug=0;
+////        }
+//        
+//        
+//        bool bold = [self.drawableTemplate[@"bold"] boolValue];
+//        bool italic = [self.drawableTemplate[@"italic"] boolValue];
+//        NSString* font=self.drawableTemplate[@"font"];
+//        
+//        //    [super flipContext:context ContextHeight:flip_height];
+//        // super flipContext:context ContextHeight:<#(double)#>
+//        CGFloat fontsize = [self.drawableTemplate[@"size"] doubleValue];
+//        
+//        //NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[title dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
+//        //创建AttributeStringfdsa
+//        
+//        NSMutableAttributedString *string = nil;
+//        //    if([self.drawableTemplate[@"ishtml"] boolValue])
+//        //    {
+//        //        string=[[[NSAttributedString alloc] initWithData:[self.text dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil] mutableCopy];
+//        //
+//        //    }
+//        //    else
+//        {
+//            string=[[NSMutableAttributedString alloc] initWithString:self.text];
+//            //创建字体以及字体大小
+//            //        CTFontRef ctfont = [self CreateFont:font size:fontsize bold:bold];//CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+//            //        //    CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+//            //        //字体,把helvetica 样式加到整个,string上
+//            //        [string addAttribute:(id)kCTFontAttributeName
+//            //                       value:CFBridgingRelease(ctfont)
+//            //                       range:NSMakeRange(0, [string length])];
+//            //
+//            //        //字体样式 ,把helveticaBold 样式加到整个,string上
+//            //        //    [string addAttribute:(id)kCTFontAttributeName
+//            //        //                   value:CFBridgingRelease(helveticaBold)
+//            //        //                   range:NSMakeRange(0, [string length])];
+//            //
+//            //        //颜色,此处为黑色,你可以自己改颜色,[UIColor redColor]
+//            //        [string addAttribute:(id)kCTForegroundColorAttributeName
+//            //                       value:(id)self.textColor.CGColor
+//            //                       range:NSMakeRange(0, [string length])];
+//            
+//            string = [self richtext2attributedstring:string font:font size:fontsize bold:bold];
+//            
+//            
+//            //设置字体间距
+//            long number = self.characterSpace;
+//            CFNumberRef num = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt8Type, &number);
+//            [string addAttribute:(id)kCTKernAttributeName value:CFBridgingRelease(num) range:NSMakeRange(0, [string length])];
+//            //CFRelease(num);
+//            
+//            
+//            //创建文本对齐方式
+//            CTTextAlignment alignment = self.textalignment;//对齐方
+//            CTParagraphStyleSetting alignmentStyle;
+//            alignmentStyle.spec=kCTParagraphStyleSpecifierAlignment;
+//            alignmentStyle.valueSize=sizeof(alignment);
+//            alignmentStyle.value=&alignment;
+//            
+//            //创建文本,    行间距
+//            CGFloat lineSpace=self.lineSpace;//间距数据
+//            CTParagraphStyleSetting lineSpaceStyle;
+//            lineSpaceStyle.spec=kCTParagraphStyleSpecifierLineSpacing;
+//            lineSpaceStyle.valueSize=sizeof(lineSpace);
+//            lineSpaceStyle.value=&lineSpace;
+//            
+//            //设置  line break;
+//            CTLineBreakMode linebreakmode = kCTLineBreakByTruncatingTail;
+//            CTParagraphStyleSetting linebreakStyle;
+//            linebreakStyle.spec = kCTParagraphStyleSpecifierLineBreakMode;
+//            linebreakStyle.valueSize = sizeof(CGFloat);
+//            linebreakStyle.value = &linebreakmode;
+//            
+//            
+//            //设置  段落间距
+//            CGFloat paragraph = self.paragraphSpace;
+//            CTParagraphStyleSetting paragraphStyle;
+//            paragraphStyle.spec = kCTParagraphStyleSpecifierParagraphSpacing;
+//            paragraphStyle.valueSize = sizeof(CGFloat);
+//            paragraphStyle.value = &paragraph;
+//            
+//            
+//            
+//            
+//            //创建样式数组
+//            CTParagraphStyleSetting settings[]={
+//                alignmentStyle,lineSpaceStyle,paragraphStyle,linebreakStyle
+//            };
+//            
+//            //设置样式
+//            CTParagraphStyleRef paragraphStyle1 = CTParagraphStyleCreate(settings, sizeof(settings));
+//            
+//            //给字符串添加样式attribute
+//            [string addAttribute:(id)kCTParagraphStyleAttributeName
+//                           value:CFBridgingRelease(paragraphStyle1)
+//                           range:NSMakeRange(0, [string length])];
+//            
+//        }
+//        
+//        
+//        
+//        //     CGRect pdfrect=[self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
+//        // [string drawInRect:pdfrect];
+//        
+//        
+//        //   [self.text drawInRect:pdfrect withAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:40],NSForegroundColorAttributeName : [UIColor redColor]}];
+//        
+//        // layout master
+//        CTFramesetterRef  framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);
+//        //计算文本绘制size ,这里300是文字宽度,你可以自己更改为247,但是要记得,在height 方法里的这个位置,也改为247
+//        CGSize tmpSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0), NULL, CGSizeMake(self.rect.size.width-self.margin_left-self.margin_right, MAXFLOAT), NULL);
+//        //创建textBoxSize以设置view的frame
+//        CGSize textBoxSize = CGSizeMake((int)tmpSize.width + 1, (int)tmpSize.height + 1);
+//        //    DebugLog(@"textBoxSize0  == %f,%f,%f",textBoxSize.width,textBoxSize.height,textBoxSize.width / textBoxSize.height);
+//        //   self.frame = CGRectMake(0, 0, textBoxSize.width , textBoxSize.height);
+//        //    [string release];
+//        
+//        //- (void)drawRect:(CGRect)rect;代码
+//        
+//        
+//        
+//        
+//        //    CGMutablePathRef leftColumnPath = CGPathCreateMutable();
+//        
+//        CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
+//        
+//
+//        double height =0;
+//        if(tmpSize.height<parentrect.size.height)
+//            height=tmpSize.height;
+//        else
+//            if(expand)
+//            {
+//                height=tmpSize.height;
+//                self.rect = CGRectMake(self.rect.origin.x, self.rect.origin.y, self.rect.size.width, height+self.margin_top+self.margin_bottom);
+//            }
+//            else
+//                height=parentrect.size.height;
+//        
+//        CGRect rect=CGRectMake(parentrect.origin.x, parentrect.origin.y, parentrect.size.width, height);
+//        
+//        CGRect expand_rect=rect;
+//        
+//        //    CGRect rect=[RAUtils rectAlign:parentrect rect:scalerect hAlign:self.hAlign vAlign:self.vAlign];
+//        //    rect=[RAUtils rectVAlign:parentrect rect:rect vAlign:self.vAlign];
+//        //
+//        //    // CGRect pdfrect = [self to_pdf_rect:p_rect pos:self.rect contextHeight:flip_height];
+//        //
+//        //    rect= [self parent_to_pdf_rect:rect contextHeight:flip_height];
+//        //    //  pdfrect=CGRectMake(pdfrect.origin.x, flip_height-pdfrect.origin.y, pdfrect.size.width, pdfrect.size.height);
+//        //    CGPathAddRect(leftColumnPath, NULL,
+//        //                  rect);
+//        //
+//        //    CTFrameRef leftFrame = CTFramesetterCreateFrame(framesetter,
+//        //                                                    CFRangeMake(0, 0),
+//        //                                                    leftColumnPath, NULL);
+//        //
+//        //    //    DebugLog(@"textBoxSize1  == %f,%f",self.frame.size.width,self.frame.size.height);
+//        //    // flip the coordinate system
+//        //    //    CGContextRef context = UIGraphicsGetCurrentContext();
+//        //
+//        //
+//        //    //    CGContextClearRect(context, self.rect);
+//        //    //    CGContextSetFillColorWithColor(context, [[UIColor whiteColor]CGColor]);
+//        //    //    CGContextFillRect(context, CGRectMake(0, 0, self.rect.size.width, self.rect.size.height));
+//        //    
+//        //    
+//        //    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
+//        //    //   CGContextTranslateCTM(context, 0, self.rect.size.height);
+//        //    //   CGContextScaleCTM(context, 1.0, -1.0);
+//        //    
+//        //    // draw
+//        //    CTFrameDraw(leftFrame, context);
+//        //    
+//        //    
+//        //    CFRelease(leftFrame);
+//        //    // cleanup
+//        //    
+//        //    CGPathRelease(leftColumnPath);
+//        CFRelease(framesetter);
+//        
+//        
+//        //    return self.rect;
+//        //  [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
+//        if(expand&&expand_rect.size.height>parentrect.size.height)
+//            return expand_rect;
+//        else
+//            return parentrect;
+//        //    return CGPointMake(parentrect.origin.x+parentrect.size.width, parentrect.origin.y+parentrect.size.height);
+//        
+//        //    [super restoreFlip:context ContextHeight:flip_height];
+//    }
+//    
+//    
+//}
+//-(CTFontRef)CreateFont:(NSString*)name  size:(double)size bold:(bool)bold
+//{
+//    
+//    if(name.length==0)
+//    {
+//        name=@"Helvetica";
+//        //        name=@"DejaVu Sans";
+//    }
+//    if(size==0)
+//    {
+//        size=10;
+//    }
+//    NSString* style = @"Regular";
+//    if(bold)
+//        style=@"Bold";
+//    
+//    //name=@"Courier";
+//    
+//    NSDictionary *fontAttributes =
+//    [NSDictionary dictionaryWithObjectsAndKeys:
+//     name, (NSString *)kCTFontFamilyNameAttribute,
+//     style, (NSString *)kCTFontStyleNameAttribute,
+//     [NSNumber numberWithFloat:size],
+//     (NSString *)kCTFontSizeAttribute,
+//     nil];
+//    // Create a descriptor.
+//    CFDictionaryRef cffontAttributes =(__bridge CFDictionaryRef)fontAttributes;
+//    CTFontDescriptorRef descriptor =
+//    CTFontDescriptorCreateWithAttributes(cffontAttributes);
+//    
+// //      CFBridgingRelease(cffontAttributes);
+//    
+//    // Create a font using the descriptor.
+//    CTFontRef font = CTFontCreateWithFontDescriptor(descriptor, 0.0, NULL);
+//    CFBridgingRelease(descriptor);
+//    
+//    return font;
+//    
+//    //    if(bold)
+//    //    {
+//    //        CTFontRef font=CTFontCreateWithName((__bridge CFStringRef)name, size, NULL);
+//    //        CTFontRef font_bold =CTFontCreateCopyWithSymbolicTraits(font, 0.0, NULL, kCTFontBoldTrait, kCTFontBoldTrait);
+//    //        CFBridgingRelease(font);
+//    //        return font_bold;
+//    //    }
+//    //    return CTFontCreateWithName((__bridge CFStringRef)name, size, NULL);
+//}
+////-(NSString*) QueryFontName:(NSString*)font
+////{
+////    if(font==nil)
+////    {
+////        return @"Helvetica";
+////    }
+////    else if([font.lowercaseString isEqualToString:@"kalinga"])
+////    {
+////        return @"kalinga";
+////    }
+////    return @"Helvetica";
+////}
+//-(NSMutableAttributedString*) richtext2attributedstring:(NSMutableAttributedString*)string font:(NSString*)font  size:(double)size bold:(bool)bold
+//{
+//    //    UILabel* uilabel=[[UILabel alloc]init];
+//    //    uilabel.font=[UIFont fontWithName:font size:size];
+//    //    NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[self.text dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
+//    //    uilabel.attributedText = attrStr;
+//    //    DebugLog(@"%@", attrStr);
+//    //    DebugLog(@"%@", uilabel.attributedText);
+//    
+//    CTFontRef ctfont = [self CreateFont:font size:size bold:bold];//CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);b
+//    
+//    //CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+//    //    CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+//    //字体,把helvetica 样式加到整个,string上
+//    [string addAttribute:(id)kCTFontAttributeName
+//                   value:CFBridgingRelease(ctfont)
+//                   range:NSMakeRange(0, [string length])];
+//    
+//    //颜色,此处为黑色,你可以自己改颜色,[UIColor redColor]
+//    [string addAttribute:(id)kCTForegroundColorAttributeName
+//                   value:(id)self.textColor.CGColor
+//                   range:NSMakeRange(0, [string length])];
+//    
+//    
+//    if(!bold)
+//    {
+//        CTFontRef ctfont_bold = [self CreateFont:font size:size bold:true];
+//        NSString* newstring= nil;
+//        //   NSString *content =  string.string ;
+//        NSString *pattern = @"\\<b\\>([\\s\\S]*?)\\<\\/b\\>";
+//        //        NSArray* matches=[TextUtils expression_varable:content regex:pattern];
+//        //        if (matches) {
+//        //            for (NSTextCheckingResult *match in matches) {
+//        //                for (int i = 0; i < match.numberOfRanges; ++i) {
+//        //                    DebugLog(@"%d-> %@",i, [content substringWithRange:[match rangeAtIndex:i]]);
+//        //                }
+//        //            }
+//        //        }
+//        NSTextCheckingResult * match=[TextUtils expression_findfistMatch:string.string regex:pattern];
+//        
+//        while(match)
+//        {
+//            //for (int i = 0; i < match.numberOfRanges/2; ++i)
+//            {
+//                int i=0;
+//                DebugLog(@"%d->range with richtext label: %d,%d",i, [match rangeAtIndex:i].location,[match rangeAtIndex:i].length);
+//                DebugLog(@"%d-> range of text: %d,%d ",i+1, [match rangeAtIndex:i+1].location,[match rangeAtIndex:i+1].length);
+//                
+//                
+//                DebugLog(@"string length: %d",string.string.length);
+//                [string addAttribute:(id)kCTFontAttributeName
+//                               value:(__bridge id _Nonnull)(ctfont_bold)
+//                               range:[match rangeAtIndex:i+1]];
+//                
+//                [string replaceCharactersInRange:NSMakeRange([match rangeAtIndex:i+1].location+[match rangeAtIndex:i+1].length, [match rangeAtIndex:i].location+[match rangeAtIndex:i].length-([match rangeAtIndex:i+1].location+[match rangeAtIndex:i+1].length)) withString:@""];
+//                [string replaceCharactersInRange:NSMakeRange([match rangeAtIndex:i].location, [match rangeAtIndex:i+1].location-[match rangeAtIndex:i].location) withString:@""];
+//                
+//                DebugLog(@"string after replace: %@",string.string);
+//                //newstring=[newstring stringByReplacingOccurrencesOfString:[content substringWithRange:[match rangeAtIndex:i]] withString:[content substringWithRange:[match rangeAtIndex:i+1]]];
+//                match=[TextUtils expression_findfistMatch:string.string regex:pattern];
+//            }
+//        }
+//        //        if (matches)
+//        //        {
+//        //            newstring=content;
+//        //            for (NSTextCheckingResult *match in matches)
+//        //            {
+//        //
+//        //                for (int i = 0; i < match.numberOfRanges/2; ++i)
+//        //                {
+//        //                    DebugLog(@"%d-> %@",i, [content substringWithRange:[match rangeAtIndex:i]]);
+//        //                    DebugLog(@"%d-> %@",i+1, [content substringWithRange:[match rangeAtIndex:i+1]]);
+//        //
+//        //                    [string addAttribute:(id)kCTFontAttributeName
+//        //                                   value:CFBridgingRelease(ctfont_bold)
+//        //                                   range:[match rangeAtIndex:i+1]];
+//        //
+//        //                    newstring=[newstring stringByReplacingOccurrencesOfString:[content substringWithRange:[match rangeAtIndex:i]] withString:[content substringWithRange:[match rangeAtIndex:i+1]]];
+//        //
+//        //                }
+//        //            }
+//        //        }
+//        
+//        
+//        
+//        CFBridgingRelease(ctfont_bold);
+//    }
+//    
+//    
+//    return string;
+//}
+//-(CGRect) Draw:(CGContextRef) context dataSource:(NSMutableDictionary*)data ParentRect:(CGRect)p_rect startX:(double) x startY:(double) y flipHeight:(double)flip_height range:(NSRange)between_header_and_footer
+//{
+//    
+//    
+//    
+//    
+//    NSString * source=self.drawableTemplate[@"source_type"];
+//    if(source==nil)
+//        source=@"const";
+//    if([source isEqualToString:@"const"])
+//    {
+//        self.text=self.drawableTemplate[@"text"];
+//        //  self.text=[self.text stringByReplacingOccurrencesOfString:@"\r\n" withString:@"<br>"];
+//        
+//    }
+//    else if([source isEqualToString:@"data"])
+//    {
+//        if([self.drawableTemplate[@"source_isexpression"] boolValue])
+//        {
+//            NSString *content =  data[self.drawableTemplate[@"source"]];
+//            NSString *pattern = @"\\$\\.\\{([\\s\\S]*?)\\}\\.\\$";
+//            NSArray* matches=[TextUtils expression_varable:content regex:pattern];
+//            //            if (matches) {
+//            //                for (NSTextCheckingResult *match in matches) {
+//            //                    for (int i = 0; i < match.numberOfRanges; ++i) {
+//            //                        DebugLog(@"%d-> %@",i, [content substringWithRange:[match rangeAtIndex:i]]);
+//            //                    }
+//            //                }
+//            //            }
+//            if (matches)
+//            {
+//                self.text=content;
+//                for (NSTextCheckingResult *match in matches)
+//                {
+//                    
+//                    for (int i = 0; i < match.numberOfRanges/2; ++i) {
+//                        DebugLog(@"%d-> %@",i, [content substringWithRange:[match rangeAtIndex:i]]);
+//                        DebugLog(@"%d-> %@",i+1, [content substringWithRange:[match rangeAtIndex:i+1]]);
+//                        
+//                        self.text=[self.text stringByReplacingOccurrencesOfString:[content substringWithRange:[match rangeAtIndex:i]] withString:[NSString stringWithFormat:@"%@",data[[content substringWithRange:[match rangeAtIndex:i+1]]]]];
+//                    }
+//                }
+//            }
+//            //self.text=content;
+//            
+//        }
+//        else
+//        {
+//            self.text=data[self.drawableTemplate[@"source"]];
+//        }
+//    }
+//    
+//    if(self.text==nil)
+//        self.text=@"";
+//    
+//    
+//    
+//    
+//    
+////    if([self.text isEqualToString:@"www.newpacificdirect.com"])
+////    {
+////        int debug=0;
+////    }
+//    
+//    
+//    bool bold = [self.drawableTemplate[@"bold"] boolValue];
+//    bool italic = [self.drawableTemplate[@"italic"] boolValue];
+//    NSString* font=self.drawableTemplate[@"font"];
+//    
+//    //    [super flipContext:context ContextHeight:flip_height];
+//    // super flipContext:context ContextHeight:<#(double)#>
+//    CGFloat fontsize = [self.drawableTemplate[@"size"] doubleValue];
+//    
+//    //NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[title dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
+//    //创建AttributeStringfdsa
+//    
+//    NSMutableAttributedString *string = nil;
+//    //    if([self.drawableTemplate[@"ishtml"] boolValue])
+//    //    {
+//    //        string=[[[NSAttributedString alloc] initWithData:[self.text dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil] mutableCopy];
+//    //
+//    //    }
+//    //    else
+//    
+//        string=[[NSMutableAttributedString alloc] initWithString:self.text];
+//        //创建字体以及字体大小
+//        //        CTFontRef ctfont = [self CreateFont:font size:fontsize bold:bold];//CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+//        //        //    CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica"), fontsize, NULL);
+//        //        //字体,把helvetica 样式加到整个,string上
+//        //        [string addAttribute:(id)kCTFontAttributeName
+//        //                       value:CFBridgingRelease(ctfont)
+//        //                       range:NSMakeRange(0, [string length])];
+//        //
+//        //        //字体样式 ,把helveticaBold 样式加到整个,string上
+//        //        //    [string addAttribute:(id)kCTFontAttributeName
+//        //        //                   value:CFBridgingRelease(helveticaBold)
+//        //        //                   range:NSMakeRange(0, [string length])];
+//        //
+//        //        //颜色,此处为黑色,你可以自己改颜色,[UIColor redColor]
+//        //        [string addAttribute:(id)kCTForegroundColorAttributeName
+//        //                       value:(id)self.textColor.CGColor
+//        //                       range:NSMakeRange(0, [string length])];
+//        
+//        string = [self richtext2attributedstring:string font:font size:fontsize bold:bold];
+//        
+//        
+//        //设置字体间距
+//        long number = self.characterSpace;
+//        CFNumberRef num = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt8Type, &number);
+//        [string addAttribute:(id)kCTKernAttributeName value:CFBridgingRelease(num) range:NSMakeRange(0, [string length])];
+//        //CFRelease(num);
+//        
+//        
+//        //创建文本对齐方式
+//        CTTextAlignment alignment = self.textalignment;//对齐方
+//        CTParagraphStyleSetting alignmentStyle;
+//        alignmentStyle.spec=kCTParagraphStyleSpecifierAlignment;
+//        alignmentStyle.valueSize=sizeof(alignment);
+//        alignmentStyle.value=&alignment;
+//        
+//        //创建文本,    行间距
+//        CGFloat lineSpace=self.lineSpace;//间距数据
+//        CTParagraphStyleSetting lineSpaceStyle;
+//        lineSpaceStyle.spec=kCTParagraphStyleSpecifierLineSpacing;
+//        lineSpaceStyle.valueSize=sizeof(lineSpace);
+//        lineSpaceStyle.value=&lineSpace;
+//        
+//        //设置  line break;
+//        CTLineBreakMode linebreakmode = kCTLineBreakByTruncatingTail;
+//        CTParagraphStyleSetting linebreakStyle;
+//        linebreakStyle.spec = kCTParagraphStyleSpecifierLineBreakMode;
+//        linebreakStyle.valueSize = sizeof(CGFloat);
+//        linebreakStyle.value = &linebreakmode;
+//        
+//        
+//        //设置  段落间距
+//        CGFloat paragraph = self.paragraphSpace;
+//        CTParagraphStyleSetting paragraphStylesetting;
+//        paragraphStylesetting.spec = kCTParagraphStyleSpecifierParagraphSpacing;
+//        paragraphStylesetting.valueSize = sizeof(CGFloat);
+//        paragraphStylesetting.value = &paragraph;
+//        
+//        
+//        
+//        
+//        //创建样式数组
+//        CTParagraphStyleSetting settings[]={
+//            alignmentStyle,lineSpaceStyle,paragraphStylesetting,linebreakStyle
+//        };
+//        
+//        //设置样式
+//        CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, sizeof(settings));
+//        
+//        //给字符串添加样式attribute
+//        [string addAttribute:(id)kCTParagraphStyleAttributeName
+//                       value:CFBridgingRelease(paragraphStyle)
+//                       range:NSMakeRange(0, [string length])];
+//        
+//    
+//    
+//    
+//    
+//    //     CGRect pdfrect=[self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
+//    // [string drawInRect:pdfrect];
+//    
+//    
+//    //   [self.text drawInRect:pdfrect withAttributes:@{NSFontAttributeName : [UIFont systemFontOfSize:40],NSForegroundColorAttributeName : [UIColor redColor]}];
+//    
+//    // layout master
+//    CTFramesetterRef  framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);
+//    //计算文本绘制size ,这里300是文字宽度,你可以自己更改为247,但是要记得,在height 方法里的这个位置,也改为247
+//    CGSize tmpSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0), NULL, CGSizeMake(self.rect.size.width-self.margin_left-self.margin_right, MAXFLOAT), NULL);
+//    //创建textBoxSize以设置view的frame
+//    CGSize textBoxSize = CGSizeMake((int)tmpSize.width + 1, (int)tmpSize.height + 1);
+//    //    DebugLog(@"textBoxSize0  == %f,%f,%f",textBoxSize.width,textBoxSize.height,textBoxSize.width / textBoxSize.height);
+//    //   self.frame = CGRectMake(0, 0, textBoxSize.width , textBoxSize.height);
+//    //    [string release];
+//    
+//    //- (void)drawRect:(CGRect)rect;代码
+//    
+//    
+//    
+//    
+//    CGMutablePathRef leftColumnPath = CGPathCreateMutable();
+//    
+//    CGRect parentrect = [self to_parent_rect:p_rect pos:self.rect offsetX:0 offsetY:0];
+//    
+//    bool expand=[self.drawableTemplate[@"expand"] boolValue];
+//    double height =0;
+//    if(tmpSize.height<parentrect.size.height)
+//        height=tmpSize.height;
+//    else
+//        if(expand)
+//        {
+//            height=tmpSize.height;
+//            self.rect = CGRectMake(self.rect.origin.x, self.rect.origin.y, self.rect.size.width, height+self.margin_top+self.margin_bottom);
+//        }
+//        else
+//            height=parentrect.size.height;
+//    
+//    CGRect rect=CGRectMake(parentrect.origin.x, parentrect.origin.y, parentrect.size.width, height);
+//    
+//    CGRect expand_rect=rect;
+//    
+//    //    CGRect rect=[RAUtils rectAlign:parentrect rect:scalerect hAlign:self.hAlign vAlign:self.vAlign];
+//    rect=[TextUtils rectVAlign:parentrect rect:rect vAlign:self.vAlign];
+//    
+//    // CGRect pdfrect = [self to_pdf_rect:p_rect pos:self.rect contextHeight:flip_height];
+//    
+//    rect= [self parent_to_pdf_rect:rect contextHeight:flip_height];
+//    //  pdfrect=CGRectMake(pdfrect.origin.x, flip_height-pdfrect.origin.y, pdfrect.size.width, pdfrect.size.height);
+//    CGPathAddRect(leftColumnPath, NULL,
+//                  rect);
+//    
+//    CTFrameRef leftFrame = CTFramesetterCreateFrame(framesetter,
+//                                                    CFRangeMake(0, 0),
+//                                                    leftColumnPath, NULL);
+//    
+//    //    DebugLog(@"textBoxSize1  == %f,%f",self.frame.size.width,self.frame.size.height);
+//    // flip the coordinate system
+//    //    CGContextRef context = UIGraphicsGetCurrentContext();
+//    
+//    
+//    //    CGContextClearRect(context, self.rect);
+//    //    CGContextSetFillColorWithColor(context, [[UIColor whiteColor]CGColor]);
+//    //    CGContextFillRect(context, CGRectMake(0, 0, self.rect.size.width, self.rect.size.height));
+//    
+//    
+//    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
+//    //   CGContextTranslateCTM(context, 0, self.rect.size.height);
+//    //   CGContextScaleCTM(context, 1.0, -1.0);
+//    
+//    // draw
+//    CTFrameDraw(leftFrame, context);
+//    
+//    
+//    CFRelease(leftFrame);
+//    // cleanup
+//    
+//    CGPathRelease(leftColumnPath);
+//    CFRelease(framesetter);
+//    
+//    
+//    //    return self.rect;
+//    [self DrawBound:context dataSource:data ParentRect:p_rect startX:x startY:y flipHeight:flip_height range:between_header_and_footer];
+//    if(expand&&expand_rect.size.height>parentrect.size.height)
+//        return expand_rect;
+//    else
+//        return parentrect;
+//    //    return CGPointMake(parentrect.origin.x+parentrect.size.width, parentrect.origin.y+parentrect.size.height);
+//    
+//    //    [super restoreFlip:context ContextHeight:flip_height];
+//}
+//
+//
+//@end