mirror of
https://github.com/encounter/engine.git
synced 2026-03-30 11:09:55 -07:00
30 lines
1.1 KiB
Plaintext
30 lines
1.1 KiB
Plaintext
// 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
|