| // 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 |