// // YYTextRubyAnnotation.m // YYKit // // Created by ibireme on 15/4/24. // 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 "YYTextRubyAnnotation.h" @implementation YYTextRubyAnnotation - (instancetype)init { self = super.init; self.alignment = kCTRubyAlignmentAuto; self.overhang = kCTRubyOverhangAuto; self.sizeFactor = 0.5; return self; } + (instancetype)rubyWithCTRubyRef:(CTRubyAnnotationRef)ctRuby { if (!ctRuby) return nil; YYTextRubyAnnotation *one = [self new]; one.alignment = CTRubyAnnotationGetAlignment(ctRuby); one.overhang = CTRubyAnnotationGetOverhang(ctRuby); one.sizeFactor = CTRubyAnnotationGetSizeFactor(ctRuby); one.textBefore = (__bridge NSString *)(CTRubyAnnotationGetTextForPosition(ctRuby, kCTRubyPositionBefore)); one.textAfter = (__bridge NSString *)(CTRubyAnnotationGetTextForPosition(ctRuby, kCTRubyPositionAfter)); one.textInterCharacter = (__bridge NSString *)(CTRubyAnnotationGetTextForPosition(ctRuby, kCTRubyPositionInterCharacter)); one.textInline = (__bridge NSString *)(CTRubyAnnotationGetTextForPosition(ctRuby, kCTRubyPositionInline)); return one; } - (CTRubyAnnotationRef)CTRubyAnnotation CF_RETURNS_RETAINED { if (((long)CTRubyAnnotationCreate + 1) == 1) return NULL; // system not support CFStringRef text[kCTRubyPositionCount]; text[kCTRubyPositionBefore] = (__bridge CFStringRef)(_textBefore); text[kCTRubyPositionAfter] = (__bridge CFStringRef)(_textAfter); text[kCTRubyPositionInterCharacter] = (__bridge CFStringRef)(_textInterCharacter); text[kCTRubyPositionInline] = (__bridge CFStringRef)(_textInline); CTRubyAnnotationRef ruby = CTRubyAnnotationCreate(_alignment, _overhang, _sizeFactor, text); return ruby; } - (id)copyWithZone:(NSZone *)zone { YYTextRubyAnnotation *one = [self.class new]; one.alignment = _alignment; one.overhang = _overhang; one.sizeFactor = _sizeFactor; one.textBefore = _textBefore; one.textAfter = _textAfter; one.textInterCharacter = _textInterCharacter; one.textInline = _textInline; return one; } - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:@(_alignment) forKey:@"alignment"]; [aCoder encodeObject:@(_overhang) forKey:@"overhang"]; [aCoder encodeObject:@(_sizeFactor) forKey:@"sizeFactor"]; [aCoder encodeObject:_textBefore forKey:@"textBefore"]; [aCoder encodeObject:_textAfter forKey:@"textAfter"]; [aCoder encodeObject:_textInterCharacter forKey:@"textInterCharacter"]; [aCoder encodeObject:_textInline forKey:@"textInline"]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [self init]; _alignment = ((NSNumber *)[aDecoder decodeObjectForKey:@"alignment"]).intValue; _overhang = ((NSNumber *)[aDecoder decodeObjectForKey:@"overhang"]).intValue; _sizeFactor = ((NSNumber *)[aDecoder decodeObjectForKey:@"sizeFactor"]).intValue; _textBefore = [aDecoder decodeObjectForKey:@"textBefore"]; _textAfter = [aDecoder decodeObjectForKey:@"textAfter"]; _textInterCharacter = [aDecoder decodeObjectForKey:@"textInterCharacter"]; _textInline = [aDecoder decodeObjectForKey:@"textInline"]; return self; } @end