Flutter Engine
string_range_sanitization.mm
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "flutter/fml/platform/darwin/string_range_sanitization.h"
6 
7 namespace fml {
8 
9 NSRange RangeForCharacterAtIndex(NSString* text, NSUInteger index) {
10  if (text == nil || index > text.length) {
11  return NSMakeRange(NSNotFound, 0);
12  }
13  if (index < text.length)
14  return [text rangeOfComposedCharacterSequenceAtIndex:index];
15  return NSMakeRange(index, 0);
16 }
17 
18 NSRange RangeForCharactersInRange(NSString* text, NSRange range) {
19  if (text == nil || range.location + range.length > text.length) {
20  return NSMakeRange(NSNotFound, 0);
21  }
22  NSRange sanitizedRange = [text rangeOfComposedCharacterSequencesForRange:range];
23  // We don't want to override the length, we just want to make sure we don't
24  // select into the middle of a multi-byte character. Taking the
25  // `sanitizedRange`'s length will end up altering the actual selection.
26  return NSMakeRange(sanitizedRange.location, range.length);
27 }
28 
29 } // namespace fml
NSRange RangeForCharactersInRange(NSString *text, NSRange range)
NSRange RangeForCharacterAtIndex(NSString *text, NSUInteger index)
Definition: ascii_trie.cc:9