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/NSAttributedString+YYText.h | 1415 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 1,415 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/YYText/YYText/Utility/NSAttributedString+YYText.h b/screendisplay/Pods/YYText/YYText/Utility/NSAttributedString+YYText.h
new file mode 100755
index 0000000..8c794a9
--- /dev/null
+++ b/screendisplay/Pods/YYText/YYText/Utility/NSAttributedString+YYText.h
@@ -0,0 +1,1415 @@
+//
+//  NSAttributedString+YYText.h
+//  YYText <https://github.com/ibireme/YYText>
+//
+//  Created by ibireme on 14/10/7.
+//  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 <UIKit/UIKit.h>
+#import <CoreText/CoreText.h>
+
+#if __has_include(<YYText/YYText.h>)
+#import <YYText/YYTextAttribute.h>
+#import <YYText/YYTextRubyAnnotation.h>
+#else
+#import "YYTextAttribute.h"
+#import "YYTextRubyAnnotation.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ Get pre-defined attributes from attributed string.
+ All properties defined in UIKit, CoreText and YYText are included.
+ */
+@interface NSAttributedString (YYText)
+
+/**
+ Archive the string to data.
+ @return Returns nil if an error occurs.
+ */
+- (nullable NSData *)yy_archiveToData;
+
+/**
+ Unarchive string from data.
+ @param data  The archived attributed string data.
+ @return Returns nil if an error occurs.
+ */
++ (nullable instancetype)yy_unarchiveFromData:(NSData *)data;
+
+
+
+#pragma mark - Retrieving character attribute information
+///=============================================================================
+/// @name Retrieving character attribute information
+///=============================================================================
+
+/**
+ Returns the attributes at first charactor.
+ */
+@property (nullable, nonatomic, copy, readonly) NSDictionary<NSString *, id> *yy_attributes;
+
+/**
+ Returns the attributes for the character at a given index.
+ 
+ @discussion Raises an `NSRangeException` if index lies beyond the end of the 
+ receiver's characters.
+ 
+ @param index  The index for which to return attributes. 
+ This value must lie within the bounds of the receiver.
+ 
+ @return The attributes for the character at index.
+ */
+- (nullable NSDictionary<NSString *, id> *)yy_attributesAtIndex:(NSUInteger)index;
+
+/**
+ Returns the value for an attribute with a given name of the character at a given index.
+ 
+ @discussion Raises an `NSRangeException` if index lies beyond the end of the
+ receiver's characters.
+ 
+ @param attributeName  The name of an attribute.
+ @param index          The index for which to return attributes. 
+ This value must not exceed the bounds of the receiver.
+ 
+ @return The value for the attribute named `attributeName` of the character at 
+ index `index`, or nil if there is no such attribute.
+ */
+- (nullable id)yy_attribute:(NSString *)attributeName atIndex:(NSUInteger)index;
+
+
+#pragma mark - Get character attribute as property
+///=============================================================================
+/// @name Get character attribute as property
+///=============================================================================
+
+/**
+ The font of the text. (read-only)
+ 
+ @discussion Default is Helvetica (Neue) 12.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) UIFont *yy_font;
+- (nullable UIFont *)yy_fontAtIndex:(NSUInteger)index;
+
+/**
+ A kerning adjustment. (read-only)
+ 
+ @discussion Default is standard kerning. The kerning attribute indicate how many 
+ points the following character should be shifted from its default offset as 
+ defined by the current character's font in points; a positive kern indicates a 
+ shift farther along and a negative kern indicates a shift closer to the current 
+ character. If this attribute is not present, standard kerning will be used. 
+ If this attribute is set to 0.0, no kerning will be done at all.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSNumber *yy_kern;
+- (nullable NSNumber *)yy_kernAtIndex:(NSUInteger)index;
+
+/**
+ The foreground color. (read-only)
+ 
+ @discussion Default is Black.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) UIColor *yy_color;
+- (nullable UIColor *)yy_colorAtIndex:(NSUInteger)index;
+
+/**
+ The background color. (read-only)
+ 
+ @discussion Default is nil (or no background).
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) UIColor *yy_backgroundColor;
+- (nullable UIColor *)yy_backgroundColorAtIndex:(NSUInteger)index;
+
+/**
+ The stroke width. (read-only)
+ 
+ @discussion Default value is 0.0 (no stroke). This attribute, interpreted as
+ a percentage of font point size, controls the text drawing mode: positive 
+ values effect drawing with stroke only; negative values are for stroke and fill.
+ A typical value for outlined text is 3.0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSNumber *yy_strokeWidth;
+- (nullable NSNumber *)yy_strokeWidthAtIndex:(NSUInteger)index;
+
+/**
+ The stroke color. (read-only)
+ 
+ @discussion Default value is nil (same as foreground color).
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) UIColor *yy_strokeColor;
+- (nullable UIColor *)yy_strokeColorAtIndex:(NSUInteger)index;
+
+/**
+ The text shadow. (read-only)
+ 
+ @discussion Default value is nil (no shadow).
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSShadow *yy_shadow;
+- (nullable NSShadow *)yy_shadowAtIndex:(NSUInteger)index;
+
+/**
+ The strikethrough style. (read-only)
+ 
+ @discussion Default value is NSUnderlineStyleNone (no strikethrough).
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:6.0
+ */
+@property (nonatomic, readonly) NSUnderlineStyle yy_strikethroughStyle;
+- (NSUnderlineStyle)yy_strikethroughStyleAtIndex:(NSUInteger)index;
+
+/**
+ The strikethrough color. (read-only)
+ 
+ @discussion Default value is nil (same as foreground color).
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readonly) UIColor *yy_strikethroughColor;
+- (nullable UIColor *)yy_strikethroughColorAtIndex:(NSUInteger)index;
+
+/**
+ The underline style. (read-only)
+ 
+ @discussion Default value is NSUnderlineStyleNone (no underline).
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0
+ */
+@property (nonatomic, readonly) NSUnderlineStyle yy_underlineStyle;
+- (NSUnderlineStyle)yy_underlineStyleAtIndex:(NSUInteger)index;
+
+/**
+ The underline color. (read-only)
+ 
+ @discussion Default value is nil (same as foreground color).
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readonly) UIColor *yy_underlineColor;
+- (nullable UIColor *)yy_underlineColorAtIndex:(NSUInteger)index;
+
+/**
+ Ligature formation control. (read-only)
+ 
+ @discussion Default is int value 1. The ligature attribute determines what kinds 
+ of ligatures should be used when displaying the string. A value of 0 indicates 
+ that only ligatures essential for proper rendering of text should be used, 
+ 1 indicates that standard ligatures should be used, and 2 indicates that all 
+ available ligatures should be used. Which ligatures are standard depends on the 
+ script and possibly the font.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSNumber *yy_ligature;
+- (nullable NSNumber *)yy_ligatureAtIndex:(NSUInteger)index;
+
+/**
+ The text effect. (read-only)
+ 
+ @discussion Default is nil (no effect). The only currently supported value
+ is NSTextEffectLetterpressStyle.
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSString *yy_textEffect;
+- (nullable NSString *)yy_textEffectAtIndex:(NSUInteger)index;
+
+/**
+ The skew to be applied to glyphs. (read-only)
+ 
+ @discussion Default is 0 (no skew).
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSNumber *yy_obliqueness;
+- (nullable NSNumber *)yy_obliquenessAtIndex:(NSUInteger)index;
+
+/**
+ The log of the expansion factor to be applied to glyphs. (read-only)
+ 
+ @discussion Default is 0 (no expansion).
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSNumber *yy_expansion;
+- (nullable NSNumber *)yy_expansionAtIndex:(NSUInteger)index;
+
+/**
+ The character's offset from the baseline, in points. (read-only)
+ 
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSNumber *yy_baselineOffset;
+- (nullable NSNumber *)yy_baselineOffsetAtIndex:(NSUInteger)index;
+
+/**
+ Glyph orientation control. (read-only)
+ 
+ @discussion Default is NO. A value of NO indicates that horizontal glyph forms 
+ are to be used, YES indicates that vertical glyph forms are to be used.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:4.3  YYText:6.0
+ */
+@property (nonatomic, readonly) BOOL yy_verticalGlyphForm;
+- (BOOL)yy_verticalGlyphFormAtIndex:(NSUInteger)index;
+
+/**
+ Specifies text language. (read-only)
+ 
+ @discussion Value must be a NSString containing a locale identifier. Default is 
+ unset. When this attribute is set to a valid identifier, it will be used to select 
+ localized glyphs (if supported by the font) and locale-specific line breaking rules.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:7.0  YYText:7.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSString *yy_language;
+- (nullable NSString *)yy_languageAtIndex:(NSUInteger)index;
+
+/**
+ Specifies a bidirectional override or embedding. (read-only)
+ 
+ @discussion See alse NSWritingDirection and NSWritingDirectionAttributeName.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:7.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSArray<NSNumber *> *yy_writingDirection;
+- (nullable NSArray<NSNumber *> *)yy_writingDirectionAtIndex:(NSUInteger)index;
+
+/**
+ An NSParagraphStyle object which is used to specify things like
+ line alignment, tab rulers, writing direction, etc. (read-only)
+ 
+ @discussion Default is nil ([NSParagraphStyle defaultParagraphStyle]).
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) NSParagraphStyle *yy_paragraphStyle;
+- (nullable NSParagraphStyle *)yy_paragraphStyleAtIndex:(NSUInteger)index;
+
+#pragma mark - Get paragraph attribute as property
+///=============================================================================
+/// @name Get paragraph attribute as property
+///=============================================================================
+
+/**
+ The text alignment (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion Natural text alignment is realized as left or right alignment 
+ depending on the line sweep direction of the first script contained in the paragraph.
+ @discussion Default is NSTextAlignmentNatural.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) NSTextAlignment yy_alignment;
+- (NSTextAlignment)yy_alignmentAtIndex:(NSUInteger)index;
+
+/**
+ The mode that should be used to break lines (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property contains the line break mode to be used laying out the paragraph's text.
+ @discussion Default is NSLineBreakByWordWrapping.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) NSLineBreakMode yy_lineBreakMode;
+- (NSLineBreakMode)yy_lineBreakModeAtIndex:(NSUInteger)index;
+
+/**
+ The distance in points between the bottom of one line fragment and the top of the next.
+ (A wrapper for NSParagraphStyle) (read-only)
+ 
+ @discussion This value is always nonnegative. This value is included in the line 
+ fragment heights in the layout manager.
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_lineSpacing;
+- (CGFloat)yy_lineSpacingAtIndex:(NSUInteger)index;
+
+/**
+ The space after the end of the paragraph (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property contains the space (measured in points) added at the 
+ end of the paragraph to separate it from the following paragraph. This value must
+ be nonnegative. The space between paragraphs is determined by adding the previous 
+ paragraph's paragraphSpacing and the current paragraph's paragraphSpacingBefore.
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_paragraphSpacing;
+- (CGFloat)yy_paragraphSpacingAtIndex:(NSUInteger)index;
+
+/**
+ The distance between the paragraph's top and the beginning of its text content.
+ (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property contains the space (measured in points) between the 
+ paragraph's top and the beginning of its text content.
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_paragraphSpacingBefore;
+- (CGFloat)yy_paragraphSpacingBeforeAtIndex:(NSUInteger)index;
+
+/**
+ The indentation of the first line (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property contains the distance (in points) from the leading margin 
+ of a text container to the beginning of the paragraph's first line. This value 
+ is always nonnegative.
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_firstLineHeadIndent;
+- (CGFloat)yy_firstLineHeadIndentAtIndex:(NSUInteger)index;
+
+/**
+ The indentation of the receiver's lines other than the first. (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property contains the distance (in points) from the leading margin 
+ of a text container to the beginning of lines other than the first. This value is 
+ always nonnegative.
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_headIndent;
+- (CGFloat)yy_headIndentAtIndex:(NSUInteger)index;
+
+/**
+ The trailing indentation (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion If positive, this value is the distance from the leading margin 
+ (for example, the left margin in left-to-right text). If 0 or negative, it's the 
+ distance from the trailing margin.
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_tailIndent;
+- (CGFloat)yy_tailIndentAtIndex:(NSUInteger)index;
+
+/**
+ The receiver's minimum height (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property contains the minimum height in points that any line in 
+ the receiver will occupy, regardless of the font size or size of any attached graphic. 
+ This value must be nonnegative.
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_minimumLineHeight;
+- (CGFloat)yy_minimumLineHeightAtIndex:(NSUInteger)index;
+
+/**
+ The receiver's maximum line height (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property contains the maximum height in points that any line in 
+ the receiver will occupy, regardless of the font size or size of any attached graphic. 
+ This value is always nonnegative. Glyphs and graphics exceeding this height will 
+ overlap neighboring lines; however, a maximum height of 0 implies no line height limit. 
+ Although this limit applies to the line itself, line spacing adds extra space between adjacent lines.
+ @discussion Default is 0 (no limit).
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_maximumLineHeight;
+- (CGFloat)yy_maximumLineHeightAtIndex:(NSUInteger)index;
+
+/**
+ The line height multiple (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property contains the line break mode to be used laying out the paragraph's text.
+ @discussion Default is 0 (no multiple).
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) CGFloat yy_lineHeightMultiple;
+- (CGFloat)yy_lineHeightMultipleAtIndex:(NSUInteger)index;
+
+/**
+ The base writing direction (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion If you specify NSWritingDirectionNaturalDirection, the receiver resolves 
+ the writing direction to either NSWritingDirectionLeftToRight or NSWritingDirectionRightToLeft, 
+ depending on the direction for the user's `language` preference setting.
+ @discussion Default is NSWritingDirectionNatural.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readonly) NSWritingDirection yy_baseWritingDirection;
+- (NSWritingDirection)yy_baseWritingDirectionAtIndex:(NSUInteger)index;
+
+/**
+ The paragraph's threshold for hyphenation. (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion Valid values lie between 0.0 and 1.0 inclusive. Hyphenation is attempted 
+ when the ratio of the text width (as broken without hyphenation) to the width of the 
+ line fragment is less than the hyphenation factor. When the paragraph's hyphenation 
+ factor is 0.0, the layout manager's hyphenation factor is used instead. When both 
+ are 0.0, hyphenation is disabled.
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since UIKit:6.0
+ */
+@property (nonatomic, readonly) float yy_hyphenationFactor;
+- (float)yy_hyphenationFactorAtIndex:(NSUInteger)index;
+
+/**
+ The document-wide default tab interval (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion This property represents the default tab interval in points. Tabs after the 
+ last specified in tabStops are placed at integer multiples of this distance (if positive).
+ @discussion Default is 0.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:7.0  UIKit:7.0  YYText:7.0
+ */
+@property (nonatomic, readonly) CGFloat yy_defaultTabInterval;
+- (CGFloat)yy_defaultTabIntervalAtIndex:(NSUInteger)index;
+
+/**
+ An array of NSTextTab objects representing the receiver's tab stops.
+ (A wrapper for NSParagraphStyle). (read-only)
+ 
+ @discussion The NSTextTab objects, sorted by location, define the tab stops for 
+ the paragraph style.
+ @discussion Default is 12 TabStops with 28.0 tab interval.
+ @discussion Get this property returns the first character's attribute.
+ @since CoreText:7.0  UIKit:7.0  YYText:7.0
+ */
+@property (nullable, nonatomic, copy, readonly) NSArray<NSTextTab *> *yy_tabStops;
+- (nullable NSArray<NSTextTab *> *)yy_tabStopsAtIndex:(NSUInteger)index;
+
+#pragma mark - Get YYText attribute as property
+///=============================================================================
+/// @name Get YYText attribute as property
+///=============================================================================
+
+/**
+ The text shadow. (read-only)
+ 
+ @discussion Default value is nil (no shadow).
+ @discussion Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) YYTextShadow *yy_textShadow;
+- (nullable YYTextShadow *)yy_textShadowAtIndex:(NSUInteger)index;
+
+/**
+ The text inner shadow. (read-only)
+ 
+ @discussion Default value is nil (no shadow).
+ @discussion Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) YYTextShadow *yy_textInnerShadow;
+- (nullable YYTextShadow *)yy_textInnerShadowAtIndex:(NSUInteger)index;
+
+/**
+ The text underline. (read-only)
+ 
+ @discussion Default value is nil (no underline).
+ @discussion Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) YYTextDecoration *yy_textUnderline;
+- (nullable YYTextDecoration *)yy_textUnderlineAtIndex:(NSUInteger)index;
+
+/**
+ The text strikethrough. (read-only)
+ 
+ @discussion Default value is nil (no strikethrough).
+ @discussion Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) YYTextDecoration *yy_textStrikethrough;
+- (nullable YYTextDecoration *)yy_textStrikethroughAtIndex:(NSUInteger)index;
+
+/**
+ The text border. (read-only)
+ 
+ @discussion Default value is nil (no border).
+ @discussion Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) YYTextBorder *yy_textBorder;
+- (nullable YYTextBorder *)yy_textBorderAtIndex:(NSUInteger)index;
+
+/**
+ The text background border. (read-only)
+ 
+ @discussion Default value is nil (no background border).
+ @discussion Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readonly) YYTextBorder *yy_textBackgroundBorder;
+- (nullable YYTextBorder *)yy_textBackgroundBorderAtIndex:(NSUInteger)index;
+
+/**
+ The glyph transform. (read-only)
+ 
+ @discussion Default value is CGAffineTransformIdentity (no transform).
+ @discussion Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nonatomic, readonly) CGAffineTransform yy_textGlyphTransform;
+- (CGAffineTransform)yy_textGlyphTransformAtIndex:(NSUInteger)index;
+
+
+#pragma mark - Query for YYText
+///=============================================================================
+/// @name Query for YYText
+///=============================================================================
+
+/**
+ Returns the plain text from a range.
+ If there's `YYTextBackedStringAttributeName` attribute, the backed string will
+ replace the attributed string range.
+ 
+ @param range A range in receiver.
+ @return The plain text.
+ */
+- (nullable NSString *)yy_plainTextForRange:(NSRange)range;
+
+
+#pragma mark - Create attachment string for YYText
+///=============================================================================
+/// @name Create attachment string for YYText
+///=============================================================================
+
+/**
+ Creates and returns an attachment.
+ 
+ @param content      The attachment (UIImage/UIView/CALayer).
+ @param contentMode  The attachment's content mode.
+ @param width        The attachment's container width in layout.
+ @param ascent       The attachment's container ascent in layout.
+ @param descent      The attachment's container descent in layout.
+ 
+ @return An attributed string, or nil if an error occurs.
+ @since YYText:6.0
+ */
++ (NSMutableAttributedString *)yy_attachmentStringWithContent:(nullable id)content
+                                                  contentMode:(UIViewContentMode)contentMode
+                                                        width:(CGFloat)width
+                                                       ascent:(CGFloat)ascent
+                                                      descent:(CGFloat)descent;
+
+/**
+ Creates and returns an attachment.
+ 
+ 
+ Example: ContentMode:bottom Alignment:Top.
+ 
+      The text      The attachment holder
+         ���                ���
+     ������������������������������������������������������������������������������������������������������������������������
+        / \   ���                      ��� / ___|
+       / _ \  ���                      ���| |
+      / ___ \ ���                      ���| |___     ��������� The text line
+     /_/   \_\���    ������������������������������������������    ��� \____|
+     ������������������������������    ������������������������������������������    ������������������������
+              ���    ������������������������������������������    ���
+              ���    ������������������������������������������ ������������������������������������������������������ The attachment content
+              ���    ������������������������������������������    ���
+              ������������������������������������������������������������������������
+
+ @param content        The attachment (UIImage/UIView/CALayer).
+ @param contentMode    The attachment's content mode in attachment holder
+ @param attachmentSize The attachment holder's size in text layout.
+ @param fontSize       The attachment will align to this font.
+ @param alignment      The attachment holder's alignment to text line.
+ 
+ @return An attributed string, or nil if an error occurs.
+ @since YYText:6.0
+ */
++ (NSMutableAttributedString *)yy_attachmentStringWithContent:(nullable id)content
+                                                  contentMode:(UIViewContentMode)contentMode
+                                               attachmentSize:(CGSize)attachmentSize
+                                                  alignToFont:(UIFont *)font
+                                                    alignment:(YYTextVerticalAlignment)alignment;
+
+/**
+ Creates and returns an attahment from a fourquare image as if it was an emoji.
+ 
+ @param image     A fourquare image.
+ @param fontSize  The font size.
+ 
+ @return An attributed string, or nil if an error occurs.
+ @since YYText:6.0
+ */
++ (nullable NSMutableAttributedString *)yy_attachmentStringWithEmojiImage:(UIImage *)image
+                                                                 fontSize:(CGFloat)fontSize;
+
+#pragma mark - Utility
+///=============================================================================
+/// @name Utility
+///=============================================================================
+
+/**
+ Returns NSMakeRange(0, self.length).
+ */
+- (NSRange)yy_rangeOfAll;
+
+/**
+ If YES, it share the same attribute in entire text range.
+ */
+- (BOOL)yy_isSharedAttributesInAllRange;
+
+/**
+ If YES, it can be drawn with the [drawWithRect:options:context:] method or displayed with UIKit.
+ If NO, it should be drawn with CoreText or YYText.
+ 
+ @discussion If the method returns NO, it means that there's at least one attribute 
+ which is not supported by UIKit (such as CTParagraphStyleRef). If display this string
+ in UIKit, it may lose some attribute, or even crash the app.
+ */
+- (BOOL)yy_canDrawWithUIKit;
+
+@end
+
+
+
+
+/**
+ Set pre-defined attributes to attributed string.
+ All properties defined in UIKit, CoreText and YYText are included.
+ */
+@interface NSMutableAttributedString (YYText)
+
+#pragma mark - Set character attribute
+///=============================================================================
+/// @name Set character attribute
+///=============================================================================
+
+/**
+ Sets the attributes to the entire text string.
+ 
+ @discussion The old attributes will be removed.
+ 
+ @param attributes  A dictionary containing the attributes to set, or nil to remove all attributes.
+ */
+- (void)yy_setAttributes:(nullable NSDictionary<NSString *, id> *)attributes;
+- (void)setYy_attributes:(nullable NSDictionary<NSString *, id> *)attributes;
+
+/**
+ Sets an attribute with the given name and value to the entire text string.
+ 
+ @param name   A string specifying the attribute name.
+ @param value  The attribute value associated with name. Pass `nil` or `NSNull` to
+ remove the attribute.
+ */
+- (void)yy_setAttribute:(NSString *)name value:(nullable id)value;
+
+/**
+ Sets an attribute with the given name and value to the characters in the specified range.
+ 
+ @param name   A string specifying the attribute name.
+ @param value  The attribute value associated with name. Pass `nil` or `NSNull` to
+ remove the attribute.
+ @param range  The range of characters to which the specified attribute/value pair applies.
+ */
+- (void)yy_setAttribute:(NSString *)name value:(nullable id)value range:(NSRange)range;
+
+/**
+ Removes all attributes in the specified range.
+ 
+ @param range  The range of characters.
+ */
+- (void)yy_removeAttributesInRange:(NSRange)range;
+
+
+#pragma mark - Set character attribute as property
+///=============================================================================
+/// @name Set character attribute as property
+///=============================================================================
+
+/**
+ The font of the text.
+ 
+ @discussion Default is Helvetica (Neue) 12.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) UIFont *yy_font;
+- (void)yy_setFont:(nullable UIFont *)font range:(NSRange)range;
+
+/**
+ A kerning adjustment.
+ 
+ @discussion Default is standard kerning. The kerning attribute indicate how many 
+ points the following character should be shifted from its default offset as 
+ defined by the current character's font in points; a positive kern indicates a 
+ shift farther along and a negative kern indicates a shift closer to the current 
+ character. If this attribute is not present, standard kerning will be used. 
+ If this attribute is set to 0.0, no kerning will be done at all.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSNumber *yy_kern;
+- (void)yy_setKern:(nullable NSNumber *)kern range:(NSRange)range;
+
+/**
+ The foreground color.
+ 
+ @discussion Default is Black.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) UIColor *yy_color;
+- (void)yy_setColor:(nullable UIColor *)color range:(NSRange)range;
+
+/**
+ The background color.
+ 
+ @discussion Default is nil (or no background).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) UIColor *yy_backgroundColor;
+- (void)yy_setBackgroundColor:(nullable UIColor *)backgroundColor range:(NSRange)range;
+
+/**
+ The stroke width.
+ 
+ @discussion Default value is 0.0 (no stroke). This attribute, interpreted as
+ a percentage of font point size, controls the text drawing mode: positive 
+ values effect drawing with stroke only; negative values are for stroke and fill.
+ A typical value for outlined text is 3.0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSNumber *yy_strokeWidth;
+- (void)yy_setStrokeWidth:(nullable NSNumber *)strokeWidth range:(NSRange)range;
+
+/**
+ The stroke color.
+ 
+ @discussion Default value is nil (same as foreground color).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) UIColor *yy_strokeColor;
+- (void)yy_setStrokeColor:(nullable UIColor *)strokeColor range:(NSRange)range;
+
+/**
+ The text shadow.
+ 
+ @discussion Default value is nil (no shadow).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSShadow *yy_shadow;
+- (void)yy_setShadow:(nullable NSShadow *)shadow range:(NSRange)range;
+
+/**
+ The strikethrough style.
+ 
+ @discussion Default value is NSUnderlineStyleNone (no strikethrough).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:6.0
+ */
+@property (nonatomic, readwrite) NSUnderlineStyle yy_strikethroughStyle;
+- (void)yy_setStrikethroughStyle:(NSUnderlineStyle)strikethroughStyle range:(NSRange)range;
+
+/**
+ The strikethrough color.
+ 
+ @discussion Default value is nil (same as foreground color).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readwrite) UIColor *yy_strikethroughColor;
+- (void)yy_setStrikethroughColor:(nullable UIColor *)strikethroughColor range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+
+/**
+ The underline style.
+ 
+ @discussion Default value is NSUnderlineStyleNone (no underline).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0
+ */
+@property (nonatomic, readwrite) NSUnderlineStyle yy_underlineStyle;
+- (void)yy_setUnderlineStyle:(NSUnderlineStyle)underlineStyle range:(NSRange)range;
+
+/**
+ The underline color.
+ 
+ @discussion Default value is nil (same as foreground color).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readwrite) UIColor *yy_underlineColor;
+- (void)yy_setUnderlineColor:(nullable UIColor *)underlineColor range:(NSRange)range;
+
+/**
+ Ligature formation control.
+ 
+ @discussion Default is int value 1. The ligature attribute determines what kinds 
+ of ligatures should be used when displaying the string. A value of 0 indicates 
+ that only ligatures essential for proper rendering of text should be used, 
+ 1 indicates that standard ligatures should be used, and 2 indicates that all 
+ available ligatures should be used. Which ligatures are standard depends on the 
+ script and possibly the font.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:3.2  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSNumber *yy_ligature;
+- (void)yy_setLigature:(nullable NSNumber *)ligature range:(NSRange)range;
+
+/**
+ The text effect.
+ 
+ @discussion Default is nil (no effect). The only currently supported value
+ is NSTextEffectLetterpressStyle.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSString *yy_textEffect;
+- (void)yy_setTextEffect:(nullable NSString *)textEffect range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+
+/**
+ The skew to be applied to glyphs. 
+ 
+ @discussion Default is 0 (no skew).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSNumber *yy_obliqueness;
+- (void)yy_setObliqueness:(nullable NSNumber *)obliqueness range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+
+/**
+ The log of the expansion factor to be applied to glyphs.
+ 
+ @discussion Default is 0 (no expansion).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSNumber *yy_expansion;
+- (void)yy_setExpansion:(nullable NSNumber *)expansion range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+
+/**
+ The character's offset from the baseline, in points. 
+ 
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:7.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSNumber *yy_baselineOffset;
+- (void)yy_setBaselineOffset:(nullable NSNumber *)baselineOffset range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+
+/**
+ Glyph orientation control.
+ 
+ @discussion Default is NO. A value of NO indicates that horizontal glyph forms 
+ are to be used, YES indicates that vertical glyph forms are to be used.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:4.3  YYText:6.0
+ */
+@property (nonatomic, readwrite) BOOL yy_verticalGlyphForm;
+- (void)yy_setVerticalGlyphForm:(BOOL)verticalGlyphForm range:(NSRange)range;
+
+/**
+ Specifies text language.
+ 
+ @discussion Value must be a NSString containing a locale identifier. Default is 
+ unset. When this attribute is set to a valid identifier, it will be used to select 
+ localized glyphs (if supported by the font) and locale-specific line breaking rules.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:7.0  YYText:7.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSString *yy_language;
+- (void)yy_setLanguage:(nullable NSString *)language range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+
+/**
+ Specifies a bidirectional override or embedding.
+ 
+ @discussion See alse NSWritingDirection and NSWritingDirectionAttributeName.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:7.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSArray<NSNumber *> *yy_writingDirection;
+- (void)yy_setWritingDirection:(nullable NSArray<NSNumber *> *)writingDirection range:(NSRange)range;
+
+/**
+ An NSParagraphStyle object which is used to specify things like
+ line alignment, tab rulers, writing direction, etc.
+ 
+ @discussion Default is nil ([NSParagraphStyle defaultParagraphStyle]).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) NSParagraphStyle *yy_paragraphStyle;
+- (void)yy_setParagraphStyle:(nullable NSParagraphStyle *)paragraphStyle range:(NSRange)range;
+
+
+#pragma mark - Set paragraph attribute as property
+///=============================================================================
+/// @name Set paragraph attribute as property
+///=============================================================================
+
+/**
+ The text alignment (A wrapper for NSParagraphStyle).
+ 
+ @discussion Natural text alignment is realized as left or right alignment
+ depending on the line sweep direction of the first script contained in the paragraph.
+ @discussion Default is NSTextAlignmentNatural.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) NSTextAlignment yy_alignment;
+- (void)yy_setAlignment:(NSTextAlignment)alignment range:(NSRange)range;
+
+/**
+ The mode that should be used to break lines (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property contains the line break mode to be used laying out the paragraph's text.
+ @discussion Default is NSLineBreakByWordWrapping.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) NSLineBreakMode yy_lineBreakMode;
+- (void)yy_setLineBreakMode:(NSLineBreakMode)lineBreakMode range:(NSRange)range;
+
+/**
+ The distance in points between the bottom of one line fragment and the top of the next.
+ (A wrapper for NSParagraphStyle)
+ 
+ @discussion This value is always nonnegative. This value is included in the line
+ fragment heights in the layout manager.
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_lineSpacing;
+- (void)yy_setLineSpacing:(CGFloat)lineSpacing range:(NSRange)range;
+
+/**
+ The space after the end of the paragraph (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property contains the space (measured in points) added at the
+ end of the paragraph to separate it from the following paragraph. This value must
+ be nonnegative. The space between paragraphs is determined by adding the previous
+ paragraph's paragraphSpacing and the current paragraph's paragraphSpacingBefore.
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_paragraphSpacing;
+- (void)yy_setParagraphSpacing:(CGFloat)paragraphSpacing range:(NSRange)range;
+
+/**
+ The distance between the paragraph's top and the beginning of its text content.
+ (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property contains the space (measured in points) between the
+ paragraph's top and the beginning of its text content.
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_paragraphSpacingBefore;
+- (void)yy_setParagraphSpacingBefore:(CGFloat)paragraphSpacingBefore range:(NSRange)range;
+
+/**
+ The indentation of the first line (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property contains the distance (in points) from the leading margin
+ of a text container to the beginning of the paragraph's first line. This value
+ is always nonnegative.
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_firstLineHeadIndent;
+- (void)yy_setFirstLineHeadIndent:(CGFloat)firstLineHeadIndent range:(NSRange)range;
+
+/**
+ The indentation of the receiver's lines other than the first. (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property contains the distance (in points) from the leading margin
+ of a text container to the beginning of lines other than the first. This value is
+ always nonnegative.
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_headIndent;
+- (void)yy_setHeadIndent:(CGFloat)headIndent range:(NSRange)range;
+
+/**
+ The trailing indentation (A wrapper for NSParagraphStyle).
+ 
+ @discussion If positive, this value is the distance from the leading margin
+ (for example, the left margin in left-to-right text). If 0 or negative, it's the
+ distance from the trailing margin.
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_tailIndent;
+- (void)yy_setTailIndent:(CGFloat)tailIndent range:(NSRange)range;
+
+/**
+ The receiver's minimum height (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property contains the minimum height in points that any line in
+ the receiver will occupy, regardless of the font size or size of any attached graphic.
+ This value must be nonnegative.
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_minimumLineHeight;
+- (void)yy_setMinimumLineHeight:(CGFloat)minimumLineHeight range:(NSRange)range;
+
+/**
+ The receiver's maximum line height (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property contains the maximum height in points that any line in
+ the receiver will occupy, regardless of the font size or size of any attached graphic.
+ This value is always nonnegative. Glyphs and graphics exceeding this height will
+ overlap neighboring lines; however, a maximum height of 0 implies no line height limit.
+ Although this limit applies to the line itself, line spacing adds extra space between adjacent lines.
+ @discussion Default is 0 (no limit).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_maximumLineHeight;
+- (void)yy_setMaximumLineHeight:(CGFloat)maximumLineHeight range:(NSRange)range;
+
+/**
+ The line height multiple (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property contains the line break mode to be used laying out the paragraph's text.
+ @discussion Default is 0 (no multiple).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_lineHeightMultiple;
+- (void)yy_setLineHeightMultiple:(CGFloat)lineHeightMultiple range:(NSRange)range;
+
+/**
+ The base writing direction (A wrapper for NSParagraphStyle).
+ 
+ @discussion If you specify NSWritingDirectionNaturalDirection, the receiver resolves
+ the writing direction to either NSWritingDirectionLeftToRight or NSWritingDirectionRightToLeft,
+ depending on the direction for the user's `language` preference setting.
+ @discussion Default is NSWritingDirectionNatural.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:6.0  UIKit:6.0  YYText:6.0
+ */
+@property (nonatomic, readwrite) NSWritingDirection yy_baseWritingDirection;
+- (void)yy_setBaseWritingDirection:(NSWritingDirection)baseWritingDirection range:(NSRange)range;
+
+/**
+ The paragraph's threshold for hyphenation. (A wrapper for NSParagraphStyle).
+ 
+ @discussion Valid values lie between 0.0 and 1.0 inclusive. Hyphenation is attempted
+ when the ratio of the text width (as broken without hyphenation) to the width of the
+ line fragment is less than the hyphenation factor. When the paragraph's hyphenation
+ factor is 0.0, the layout manager's hyphenation factor is used instead. When both
+ are 0.0, hyphenation is disabled.
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since UIKit:6.0
+ */
+@property (nonatomic, readwrite) float yy_hyphenationFactor;
+- (void)yy_setHyphenationFactor:(float)hyphenationFactor range:(NSRange)range;
+
+/**
+ The document-wide default tab interval (A wrapper for NSParagraphStyle).
+ 
+ @discussion This property represents the default tab interval in points. Tabs after the
+ last specified in tabStops are placed at integer multiples of this distance (if positive).
+ @discussion Default is 0.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:7.0  UIKit:7.0  YYText:7.0
+ */
+@property (nonatomic, readwrite) CGFloat yy_defaultTabInterval;
+- (void)yy_setDefaultTabInterval:(CGFloat)defaultTabInterval range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+
+/**
+ An array of NSTextTab objects representing the receiver's tab stops.
+ (A wrapper for NSParagraphStyle).
+ 
+ @discussion The NSTextTab objects, sorted by location, define the tab stops for
+ the paragraph style.
+ @discussion Default is 12 TabStops with 28.0 tab interval.
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since CoreText:7.0  UIKit:7.0  YYText:7.0
+ */
+@property (nullable, nonatomic, copy, readwrite) NSArray<NSTextTab *> *yy_tabStops;
+- (void)yy_setTabStops:(nullable NSArray<NSTextTab *> *)tabStops range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+
+#pragma mark - Set YYText attribute as property
+///=============================================================================
+/// @name Set YYText attribute as property
+///=============================================================================
+
+/**
+ The text shadow.
+ 
+ @discussion Default value is nil (no shadow).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) YYTextShadow *yy_textShadow;
+- (void)yy_setTextShadow:(nullable YYTextShadow *)textShadow range:(NSRange)range;
+
+/**
+ The text inner shadow.
+ 
+ @discussion Default value is nil (no shadow).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) YYTextShadow *yy_textInnerShadow;
+- (void)yy_setTextInnerShadow:(nullable YYTextShadow *)textInnerShadow range:(NSRange)range;
+
+/**
+ The text underline.
+ 
+ @discussion Default value is nil (no underline).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) YYTextDecoration *yy_textUnderline;
+- (void)yy_setTextUnderline:(nullable YYTextDecoration *)textUnderline range:(NSRange)range;
+
+/**
+ The text strikethrough.
+ 
+ @discussion Default value is nil (no strikethrough).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) YYTextDecoration *yy_textStrikethrough;
+- (void)yy_setTextStrikethrough:(nullable YYTextDecoration *)textStrikethrough range:(NSRange)range;
+
+/**
+ The text border.
+ 
+ @discussion Default value is nil (no border).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) YYTextBorder *yy_textBorder;
+- (void)yy_setTextBorder:(nullable YYTextBorder *)textBorder range:(NSRange)range;
+
+/**
+ The text background border.
+ 
+ @discussion Default value is nil (no background border).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nullable, nonatomic, strong, readwrite) YYTextBorder *yy_textBackgroundBorder;
+- (void)yy_setTextBackgroundBorder:(nullable YYTextBorder *)textBackgroundBorder range:(NSRange)range;
+
+/**
+ The glyph transform.
+ 
+ @discussion Default value is CGAffineTransformIdentity (no transform).
+ @discussion Set this property applies to the entire text string.
+             Get this property returns the first character's attribute.
+ @since YYText:6.0
+ */
+@property (nonatomic, readwrite) CGAffineTransform yy_textGlyphTransform;
+- (void)yy_setTextGlyphTransform:(CGAffineTransform)textGlyphTransform range:(NSRange)range;
+
+
+#pragma mark - Set discontinuous attribute for range
+///=============================================================================
+/// @name Set discontinuous attribute for range
+///=============================================================================
+
+- (void)yy_setSuperscript:(nullable NSNumber *)superscript range:(NSRange)range;
+- (void)yy_setGlyphInfo:(nullable CTGlyphInfoRef)glyphInfo range:(NSRange)range;
+- (void)yy_setCharacterShape:(nullable NSNumber *)characterShape range:(NSRange)range;
+- (void)yy_setRunDelegate:(nullable CTRunDelegateRef)runDelegate range:(NSRange)range;
+- (void)yy_setBaselineClass:(nullable CFStringRef)baselineClass range:(NSRange)range;
+- (void)yy_setBaselineInfo:(nullable CFDictionaryRef)baselineInfo range:(NSRange)range;
+- (void)yy_setBaselineReferenceInfo:(nullable CFDictionaryRef)referenceInfo range:(NSRange)range;
+- (void)yy_setRubyAnnotation:(nullable CTRubyAnnotationRef)ruby range:(NSRange)range NS_AVAILABLE_IOS(8_0);
+- (void)yy_setAttachment:(nullable NSTextAttachment *)attachment range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+- (void)yy_setLink:(nullable id)link range:(NSRange)range NS_AVAILABLE_IOS(7_0);
+- (void)yy_setTextBackedString:(nullable YYTextBackedString *)textBackedString range:(NSRange)range;
+- (void)yy_setTextBinding:(nullable YYTextBinding *)textBinding range:(NSRange)range;
+- (void)yy_setTextAttachment:(nullable YYTextAttachment *)textAttachment range:(NSRange)range;
+- (void)yy_setTextHighlight:(nullable YYTextHighlight *)textHighlight range:(NSRange)range;
+- (void)yy_setTextBlockBorder:(nullable YYTextBorder *)textBlockBorder range:(NSRange)range;
+- (void)yy_setTextRubyAnnotation:(nullable YYTextRubyAnnotation *)ruby range:(NSRange)range NS_AVAILABLE_IOS(8_0);
+
+
+#pragma mark - Convenience methods for text highlight
+///=============================================================================
+/// @name Convenience methods for text highlight
+///=============================================================================
+
+/**
+ Convenience method to set text highlight
+ 
+ @param range           text range
+ @param color           text color (pass nil to ignore)
+ @param backgroundColor text background color when highlight
+ @param userInfo        user information dictionary (pass nil to ignore)
+ @param tapAction       tap action when user tap the highlight (pass nil to ignore)
+ @param longPressAction long press action when user long press the highlight (pass nil to ignore)
+ */
+- (void)yy_setTextHighlightRange:(NSRange)range
+                           color:(nullable UIColor *)color
+                 backgroundColor:(nullable UIColor *)backgroundColor
+                        userInfo:(nullable NSDictionary *)userInfo
+                       tapAction:(nullable YYTextAction)tapAction
+                 longPressAction:(nullable YYTextAction)longPressAction;
+
+/**
+ Convenience method to set text highlight
+ 
+ @param range           text range
+ @param color           text color (pass nil to ignore)
+ @param backgroundColor text background color when highlight
+ @param tapAction       tap action when user tap the highlight (pass nil to ignore)
+ */
+- (void)yy_setTextHighlightRange:(NSRange)range
+                           color:(nullable UIColor *)color
+                 backgroundColor:(nullable UIColor *)backgroundColor
+                       tapAction:(nullable YYTextAction)tapAction;
+
+/**
+ Convenience method to set text highlight
+ 
+ @param range           text range
+ @param color           text color (pass nil to ignore)
+ @param backgroundColor text background color when highlight
+ @param userInfo        tap action when user tap the highlight (pass nil to ignore)
+ */
+- (void)yy_setTextHighlightRange:(NSRange)range
+                           color:(nullable UIColor *)color
+                 backgroundColor:(nullable UIColor *)backgroundColor
+                        userInfo:(nullable NSDictionary *)userInfo;
+
+#pragma mark - Utilities
+///=============================================================================
+/// @name Utilities
+///=============================================================================
+
+/**
+ Inserts into the receiver the characters of a given string at a given location.
+ The new string inherit the attributes of the first replaced character from location.
+ 
+ @param string  The string to insert into the receiver, must not be nil.
+ @param location The location at which string is inserted. The location must not 
+    exceed the bounds of the receiver.
+ @throw Raises an NSRangeException if the location out of bounds.
+ */
+- (void)yy_insertString:(NSString *)string atIndex:(NSUInteger)location;
+
+/**
+ Adds to the end of the receiver the characters of a given string.
+ The new string inherit the attributes of the receiver's tail.
+ 
+ @param string  The string to append to the receiver, must not be nil.
+ */
+- (void)yy_appendString:(NSString *)string;
+
+/**
+ Set foreground color with [UIColor clearColor] in joined-emoji range.
+ Emoji drawing will not be affected by the foreground color.
+ 
+ @discussion In iOS 8.3, Apple releases some new diversified emojis. 
+ There's some single emoji which can be assembled to a new 'joined-emoji'.
+ The joiner is unicode character 'ZERO WIDTH JOINER' (U+200D).
+ For example: ���������������� -> �������������������������.
+ 
+ When there are more than 5 'joined-emoji' in a same CTLine, CoreText may render some
+ extra glyphs above the emoji. It's a bug in CoreText, try this method to avoid.
+ This bug is fixed in iOS 9.
+ */
+- (void)yy_setClearColorToJoinedEmoji;
+
+/**
+ Removes all discontinuous attributes in a specified range.
+ See `allDiscontinuousAttributeKeys`.
+ 
+ @param range A text range.
+ */
+- (void)yy_removeDiscontinuousAttributesInRange:(NSRange)range;
+
+/**
+ Returns all discontinuous attribute keys, such as RunDelegate/Attachment/Ruby.
+ 
+ @discussion These attributes can only set to a specified range of text, and
+ should not extend to other range when editing text.
+ */
++ (NSArray<NSString *> *)yy_allDiscontinuousAttributeKeys;
+
+@end
+
+NS_ASSUME_NONNULL_END

--
Gitblit v1.8.0