123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416 |
- //
- // 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
- /**
- 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.
- */
- - (NSData *)yy_archiveToData;
- /**
- Unarchive string from data.
- @param data The archived attributed string data.
- @return Returns nil if an error occurs.
- */
- + (instancetype)yy_unarchiveFromData:(NSData *)data;
- #pragma mark - Retrieving character attribute information
- ///=============================================================================
- /// @name Retrieving character attribute information
- ///=============================================================================
- /**
- Returns the attributes at first charactor.
- */
- @property (nonatomic, copy, readonly) NSDictionary *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.
- */
- - (NSDictionary *)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.
- */
- - (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 (nonatomic, strong, readonly) UIFont *yy_font;
- - (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 (nonatomic, strong, readonly) NSNumber *yy_kern;
- - (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 (nonatomic, strong, readonly) UIColor *yy_color;
- - (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 (nonatomic, strong, readonly) UIColor *yy_backgroundColor;
- - (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 (nonatomic, strong, readonly) NSNumber *yy_strokeWidth;
- - (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 (nonatomic, strong, readonly) UIColor *yy_strokeColor;
- - (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 (nonatomic, strong, readonly) NSShadow *yy_shadow;
- - (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, assign, 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 (nonatomic, strong, readonly) UIColor *yy_strikethroughColor;
- - (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, assign, 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 (nonatomic, strong, readonly) UIColor *yy_underlineColor;
- - (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 (nonatomic, strong, readonly) NSNumber *yy_ligature;
- - (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 (nonatomic, strong, readonly) NSString *yy_textEffect;
- - (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 (nonatomic, strong, readonly) NSNumber *yy_obliqueness;
- - (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 (nonatomic, strong, readonly) NSNumber *yy_expansion;
- - (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 (nonatomic, strong, readonly) NSNumber *yy_baselineOffset;
- - (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, assign, 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 (nonatomic, strong, readonly) NSString *yy_language;
- - (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 (nonatomic, strong, readonly) NSArray *yy_writingDirection;
- - (NSArray *)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 (nonatomic, strong, readonly) NSParagraphStyle *yy_paragraphStyle;
- - (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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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 (nonatomic, copy, readonly) NSArray *yy_tabStops;
- - (NSArray *)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 (nonatomic, strong, readonly) YYTextShadow *yy_textShadow;
- - (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 (nonatomic, strong, readonly) YYTextShadow *yy_textInnerShadow;
- - (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 (nonatomic, strong, readonly) YYTextDecoration *yy_textUnderline;
- - (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 (nonatomic, strong, readonly) YYTextDecoration *yy_textStrikethrough;
- - (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 (nonatomic, strong, readonly) YYTextBorder *yy_textBorder;
- - (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 (nonatomic, strong, readonly) YYTextBorder *yy_textBackgroundBorder;
- - (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, assign, 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.
- */
- - (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:(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:(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
- */
- + (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:(NSDictionary *)attributes;
- - (void)setYy_attributes:(NSDictionary *)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:(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:(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 (nonatomic, strong, readwrite) UIFont *yy_font;
- - (void)yy_setFont:(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 (nonatomic, strong, readwrite) NSNumber *yy_kern;
- - (void)yy_setKern:(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 (nonatomic, strong, readwrite) UIColor *yy_color;
- - (void)yy_setColor:(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 (nonatomic, strong, readwrite) UIColor *yy_backgroundColor;
- - (void)yy_setBackgroundColor:(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 (nonatomic, strong, readwrite) NSNumber *yy_strokeWidth;
- - (void)yy_setStrokeWidth:(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 (nonatomic, strong, readwrite) UIColor *yy_strokeColor;
- - (void)yy_setStrokeColor:(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 (nonatomic, strong, readwrite) NSShadow *yy_shadow;
- - (void)yy_setShadow:(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, assign, 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 (nonatomic, strong, readwrite) UIColor *yy_strikethroughColor;
- - (void)yy_setStrikethroughColor:(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, assign, 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 (nonatomic, strong, readwrite) UIColor *yy_underlineColor;
- - (void)yy_setUnderlineColor:(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 (nonatomic, strong, readwrite) NSNumber *yy_ligature;
- - (void)yy_setLigature:(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 (nonatomic, strong, readwrite) NSString *yy_textEffect;
- - (void)yy_setTextEffect:(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 (nonatomic, strong, readwrite) NSNumber *yy_obliqueness;
- - (void)yy_setObliqueness:(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 (nonatomic, strong, readwrite) NSNumber *yy_expansion;
- - (void)yy_setExpansion:(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 (nonatomic, strong, readwrite) NSNumber *yy_baselineOffset;
- - (void)yy_setBaselineOffset:(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, assign, 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 (nonatomic, strong, readwrite) NSString *yy_language;
- - (void)yy_setLanguage:(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 (nonatomic, strong, readwrite) NSArray *yy_writingDirection;
- - (void)yy_setWritingDirection:(NSArray *)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 (nonatomic, strong, readwrite) NSParagraphStyle *yy_paragraphStyle;
- - (void)yy_setParagraphStyle:(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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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, assign, 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 (nonatomic, copy, readwrite) NSArray *yy_tabStops;
- - (void)yy_setTabStops:(NSArray *)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 (nonatomic, strong, readwrite) YYTextShadow *yy_textShadow;
- - (void)yy_setTextShadow:(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 (nonatomic, strong, readwrite) YYTextShadow *yy_textInnerShadow;
- - (void)yy_setTextInnerShadow:(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 (nonatomic, strong, readwrite) YYTextDecoration *yy_textUnderline;
- - (void)yy_setTextUnderline:(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 (nonatomic, strong, readwrite) YYTextDecoration *yy_textStrikethrough;
- - (void)yy_setTextStrikethrough:(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 (nonatomic, strong, readwrite) YYTextBorder *yy_textBorder;
- - (void)yy_setTextBorder:(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 (nonatomic, strong, readwrite) YYTextBorder *yy_textBackgroundBorder;
- - (void)yy_setTextBackgroundBorder:(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, assign, 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:(NSNumber *)superscript range:(NSRange)range;
- - (void)yy_setGlyphInfo:(CTGlyphInfoRef)glyphInfo range:(NSRange)range;
- - (void)yy_setCharacterShape:(NSNumber *)characterShape range:(NSRange)range;
- - (void)yy_setRunDelegate:(CTRunDelegateRef)runDelegate range:(NSRange)range;
- - (void)yy_setBaselineClass:(CFStringRef)baselineClass range:(NSRange)range;
- - (void)yy_setBaselineInfo:(CFDictionaryRef)baselineInfo range:(NSRange)range;
- - (void)yy_setBaselineReferenceInfo:(CFDictionaryRef)referenceInfo range:(NSRange)range;
- - (void)yy_setRubyAnnotation:(CTRubyAnnotationRef)ruby range:(NSRange)range NS_AVAILABLE_IOS(8_0);
- - (void)yy_setAttachment:(NSTextAttachment *)attachment range:(NSRange)range NS_AVAILABLE_IOS(7_0);
- - (void)yy_setLink:(id)link range:(NSRange)range NS_AVAILABLE_IOS(7_0);
- - (void)yy_setTextBackedString:(YYTextBackedString *)textBackedString range:(NSRange)range;
- - (void)yy_setTextBinding:(YYTextBinding *)textBinding range:(NSRange)range;
- - (void)yy_setTextAttachment:(YYTextAttachment *)textAttachment range:(NSRange)range;
- - (void)yy_setTextHighlight:(YYTextHighlight *)textHighlight range:(NSRange)range;
- - (void)yy_setTextBlockBorder:(YYTextBorder *)textBlockBorder range:(NSRange)range;
- - (void)yy_setTextRubyAnnotation:(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:(UIColor *)color
- backgroundColor:(UIColor *)backgroundColor
- userInfo:(NSDictionary *)userInfo
- tapAction:(YYTextAction)tapAction
- longPressAction:(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:(UIColor *)color
- backgroundColor:(UIColor *)backgroundColor
- tapAction:(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:(UIColor *)color
- backgroundColor:(UIColor *)backgroundColor
- userInfo:(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 *)yy_allDiscontinuousAttributeKeys;
- @end
|