123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- //
- // YYTextRubyAnnotation.m
- // YYKit <https://github.com/ibireme/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
|