blob: 5aeec86a78a6d8aa6b9c8144cf122247741eae4b [file] [edit]
/*
Copyright 2018-present Google Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#import <Foundation/Foundation.h>
@interface NSString (MaterialBidi)
/**
Uses CFStringTokenizerCopyBestStringLanguage to determine string's language direction.
If the language direction is unknown or vertical returns left-to-right.
As CFStringTokenizerCopyBestStringLanguage is Apple's API, its result may change if
Apple improves or modifies the implementation.
@return the direction of the string
*/
- (NSLocaleLanguageDirection)mdf_calculatedLanguageDirection;
/**
Initializes a copy of the string tagged with the given language direction. This
formatting adds the appropriate Unicode embedding characters at the beginning and end of the
string.
Only NSLocaleLanguageDirectionLeftToRight and NSLocaleLanguageDirectionRightToLeft
language directions are supported. Other values of NSLocalLanguageDirection will
return a copy of self.
Returns a string wrapped with Unicode bidi formatting characters by inserting these characters
around the string:
RLE+|string|+PDF for RTL text, or LRE+|string|+PDF for LTR text.
@returns the new string.
*/
- (nonnull NSString *)mdf_stringWithBidiEmbedding:(NSLocaleLanguageDirection)languageDirection;
/**
Returns a copy of the string explicitly tagged with a language direction.
Uses mdf_calculatedLanguageDirection to determine string's language direction then invokes
mdf_stringWithBidiEmbedding:.
@return the new string.
*/
- (nonnull NSString *)mdf_stringWithBidiEmbedding;
/**
This method will wrap the string in embedding (LRE/RLE and PDF) characters, based on the string
direction and additionally wrapping the string in marks (LRM and RLM) if the string's direction
is different from the context direction.
|direction| can be NSLocaleLanguageDirectionLeftToRight, NSLocaleLanguageDirectionRightToLeft, or
NSLocaleLanguageDirectionUnknown. If NSLocaleLanguageDirectionUnknown, the direction of the string
will be calculated with mdf_calculatedLanguageDirection.
|contextDirection| must be specified and cannot be unknown. Only
NSLocaleLanguageDirectionLeftToRight and NSLocaleLanguageDirectionRightToLeft language directions
are supported.
@returns the new string.
*/
- (nonnull NSString *)mdf_stringWithStereoReset:(NSLocaleLanguageDirection)direction
context:(NSLocaleLanguageDirection)contextDirection;
/**
Returns a new string in which all occurrences of Unicode bidirectional format markers are removed.
@returns the new string.
*/
- (nonnull NSString *)mdf_stringWithBidiMarkersStripped;
@end