|  | // Copyright 2013 The Flutter Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef FLUTTER_FML_STRING_RANGE_SANITIZATION_H_ | 
|  | #define FLUTTER_FML_STRING_RANGE_SANITIZATION_H_ | 
|  |  | 
|  | #include <Foundation/Foundation.h> | 
|  |  | 
|  | namespace fml { | 
|  |  | 
|  | // Returns a range encompassing the grapheme cluster in which |index| is located. | 
|  | // | 
|  | // A nil |text| or an index greater than or equal to text.length will result in | 
|  | // `NSRange(NSNotFound, 0)`. | 
|  | NSRange RangeForCharacterAtIndex(NSString* text, NSUInteger index); | 
|  |  | 
|  | // Returns a range encompassing the grapheme clusters falling in |range|. | 
|  | // | 
|  | // This method will not alter the length of the input range, but will ensure | 
|  | // that the range's location is not in the middle of a multi-byte unicode | 
|  | // sequence. | 
|  | // | 
|  | // An invalid range will result in `NSRange(NSNotFound, 0)`. | 
|  | NSRange RangeForCharactersInRange(NSString* text, NSRange range); | 
|  |  | 
|  | }  // namespace fml | 
|  |  | 
|  | #endif  // FLUTTER_FML_STRING_RANGE_SANITIZATION_H_ |