/* * Copyright (C) Alexander Borisov * Copyright (C) NGINX, Inc. */ #ifndef _NJS_UNICODE_H_INCLUDED_ #define _NJS_UNICODE_H_INCLUDED_ enum { NJS_UNICODE_BOM = 0xFEFF, NJS_UNICODE_REPLACEMENT = 0xFFFD, NJS_UNICODE_MAX_CODEPOINT = 0x10FFFF, NJS_UNICODE_ERROR = 0x1FFFFF, NJS_UNICODE_CONTINUE = 0x2FFFFF }; typedef struct { uint32_t codepoint; unsigned need; u_char lower; u_char upper; } njs_unicode_decode_t; #define njs_surrogate_leading(cp) \ (((unsigned) (cp) - 0xd800) <= 0xdbff - 0xd800) #define njs_surrogate_trailing(cp) \ (((unsigned) (cp) - 0xdc00) <= 0xdfff - 0xdc00) #define njs_surrogate_any(cp) \ (((unsigned) (cp) - 0xd800) <= 0xdfff - 0xd800) #define njs_surrogate_pair(high, low) \ (0x10000 + (((high) - 0xd800) << 10) + ((low) - 0xdc00)) #endif /* _NJS_UNICODE_H_INCLUDED_ */