1 /**************************************************************************/ 2 /* */ 3 /* Copyright (c) Microsoft Corporation. All rights reserved. */ 4 /* */ 5 /* This software is licensed under the Microsoft Software License */ 6 /* Terms for Microsoft Azure RTOS. Full text of the license can be */ 7 /* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */ 8 /* and in the root directory of this software. */ 9 /* */ 10 /**************************************************************************/ 11 12 13 /**************************************************************************/ 14 /**************************************************************************/ 15 /** */ 16 /** GUIX Component */ 17 /** */ 18 /** Utility (Utility) */ 19 /** */ 20 /**************************************************************************/ 21 22 #define GX_SOURCE_CODE 23 24 /* Include necessary system files. */ 25 26 #include "gx_api.h" 27 #include "gx_utility.h" 28 29 /**************************************************************************/ 30 /* */ 31 /* FUNCTION RELEASE */ 32 /* */ 33 /* _gx_utility_utf8_string_character_get PORTABLE C */ 34 /* 6.1 */ 35 /* AUTHOR */ 36 /* */ 37 /* Kenneth Maxwell, Microsoft Corporation */ 38 /* */ 39 /* DESCRIPTION */ 40 /* */ 41 /* This function convert a unicode to a utf8. */ 42 /* */ 43 /* INPUT */ 44 /* */ 45 /* unicode Unicode to convert */ 46 /* return_utf8_str Returned utf8 string */ 47 /* return_utf8_size utf8 string size */ 48 /* */ 49 /* OUTPUT */ 50 /* */ 51 /* status Completion status */ 52 /* */ 53 /* CALLS */ 54 /* */ 55 /* */ 56 /* CALLED BY */ 57 /* */ 58 /* Application Code */ 59 /* GUIX Internal Code */ 60 /* */ 61 /* RELEASE HISTORY */ 62 /* */ 63 /* DATE NAME DESCRIPTION */ 64 /* */ 65 /* 05-19-2020 Kenneth Maxwell Initial Version 6.0 */ 66 /* 09-30-2020 Kenneth Maxwell Modified comment(s), */ 67 /* resulting in version 6.1 */ 68 /* */ 69 /**************************************************************************/ 70 #ifdef GX_UTF8_SUPPORT _gx_utility_unicode_to_utf8(ULONG unicode,GX_UBYTE * return_utf8_str,UINT * return_utf8_size)71UINT _gx_utility_unicode_to_utf8(ULONG unicode, GX_UBYTE *return_utf8_str, UINT *return_utf8_size) 72 { 73 if (unicode < 0x0080) 74 { 75 *return_utf8_size = 1; 76 return_utf8_str[0] = (GX_UBYTE)unicode; 77 } 78 else if (unicode < 0x0800) 79 { 80 *return_utf8_size = 2; 81 return_utf8_str[0] = (GX_UBYTE)(0xC0 + (GX_UBYTE)((unicode & 0x7C0) >> 6)); 82 return_utf8_str[1] = (GX_UBYTE)(0x80 + (unicode & 0x3F)); 83 } 84 else if (unicode < 0x10000) 85 { 86 *return_utf8_size = 3; 87 return_utf8_str[0] = (GX_UBYTE)(0xE0 + (GX_UBYTE)((unicode & 0xF000) >> 12)); 88 return_utf8_str[1] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0xFC0) >> 6)); 89 return_utf8_str[2] = (GX_UBYTE)(0x80 + (unicode & 0x3F)); 90 } 91 else if (unicode < 0x200000) 92 { 93 *return_utf8_size = 4; 94 return_utf8_str[0] = (GX_UBYTE)(0xF0 + (GX_UBYTE)((unicode & 0x1C0000) >> 18)); 95 return_utf8_str[1] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0x3F000) >> 12)); 96 return_utf8_str[2] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0xFC0) >> 6)); 97 return_utf8_str[3] = (GX_UBYTE)(0x80 + (unicode & 0x3F)); 98 } 99 else if (unicode < 0x4000000) 100 { 101 *return_utf8_size = 5; 102 return_utf8_str[0] = (GX_UBYTE)(0xFC + (GX_UBYTE)((unicode & 0x3000000) >> 24)); 103 return_utf8_str[1] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0xFC0000) >> 18)); 104 return_utf8_str[2] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0x3F000) >> 12)); 105 return_utf8_str[3] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0xFC0) >> 6)); 106 return_utf8_str[4] = (GX_UBYTE)(0x80 + (unicode & 0x3F)); 107 } 108 else 109 { 110 *return_utf8_size = 6; 111 return_utf8_str[0] = (GX_UBYTE)(0xFC + (GX_UBYTE)((unicode & 0x40000000) >> 30)); 112 return_utf8_str[1] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0x3F000000) >> 24)); 113 return_utf8_str[2] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0xFC0000) >> 18)); 114 return_utf8_str[3] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0x3F000) >> 12)); 115 return_utf8_str[4] = (GX_UBYTE)(0x80 + (GX_UBYTE)((unicode & 0xFC0) >> 6)); 116 return_utf8_str[5] = (GX_UBYTE)(0x80 + (unicode & 0x3F)); 117 } 118 119 return GX_SUCCESS; 120 } 121 #endif /* GX_UTF8_SUPPORT */ 122 123