blob: 8100ba9154bf7710f1a34793110da90b9798a706 [file] [log] [blame]
// 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.
#include "flutter/fml/platform/darwin/string_range_sanitization.h"
namespace fml {
NSRange RangeForCharacterAtIndex(NSString* text, NSUInteger index) {
if (text == nil || index > text.length) {
return NSMakeRange(NSNotFound, 0);
}
if (index < text.length)
return [text rangeOfComposedCharacterSequenceAtIndex:index];
return NSMakeRange(index, 0);
}
NSRange RangeForCharactersInRange(NSString* text, NSRange range) {
if (text == nil || range.location + range.length > text.length) {
return NSMakeRange(NSNotFound, 0);
}
NSRange sanitizedRange = [text rangeOfComposedCharacterSequencesForRange:range];
// We don't want to override the length, we just want to make sure we don't
// select into the middle of a multi-byte character. Taking the
// `sanitizedRange`'s length will end up altering the actual selection.
return NSMakeRange(sanitizedRange.location, range.length);
}
} // namespace fml