blob: aafdb0b3361addca213591838692ac9e64781cab [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 "keyboard_utils.h"
#include "flutter/fml/logging.h"
namespace flutter {
std::u16string EncodeUtf16(char32_t character) {
// Algorithm: https://en.wikipedia.org/wiki/UTF-16#Description
std::u16string result;
// Invalid value.
FML_DCHECK(!(character >= 0xD800 && character <= 0xDFFF) &&
!(character > 0x10FFFF));
if ((character >= 0xD800 && character <= 0xDFFF) || (character > 0x10FFFF)) {
return result;
}
if (character <= 0xD7FF || (character >= 0xE000 && character <= 0xFFFF)) {
result.push_back((char16_t)character);
return result;
}
uint32_t remnant = character - 0x10000;
result.push_back((remnant >> 10) + 0xD800);
result.push_back((remnant & 0x3FF) + 0xDC00);
return result;
}
} // namespace flutter