1 2 /* 3 * Copyright (C) Alexander Borisov 4 * Copyright (C) NGINX, Inc. 5 */ 6 7 #ifndef _NJS_UNICODE_H_INCLUDED_ 8 #define _NJS_UNICODE_H_INCLUDED_ 9 10 11 enum { 12 NJS_UNICODE_BOM = 0xFEFF, 13 NJS_UNICODE_REPLACEMENT = 0xFFFD, 14 NJS_UNICODE_MAX_CODEPOINT = 0x10FFFF, 15 NJS_UNICODE_ERROR = 0x1FFFFF, 16 NJS_UNICODE_CONTINUE = 0x2FFFFF 17 }; 18 19 typedef struct { 20 uint32_t codepoint; 21 22 unsigned need; 23 u_char lower; 24 u_char upper; 25 } njs_unicode_decode_t; 26 27 #define njs_surrogate_leading(cp) \ 28 (((unsigned) (cp) - 0xd800) <= 0xdbff - 0xd800) 29 30 #define njs_surrogate_trailing(cp) \ 31 (((unsigned) (cp) - 0xdc00) <= 0xdfff - 0xdc00) 32 33 #define njs_surrogate_any(cp) \ 34 (((unsigned) (cp) - 0xd800) <= 0xdfff - 0xd800) 35 36 #define njs_surrogate_pair(high, low) \ 37 (0x10000 + (((high) - 0xd800) << 10) + ((low) - 0xdc00)) 38 39 40 #endif /* _NJS_UNICODE_H_INCLUDED_ */ 41