Welcome! Log In Create A New Profile

Advanced

[njs] Added macro for converting surrogate pair to code point.

Alexander Borisov
April 23, 2019 11:12AM
details: https://hg.nginx.org/njs/rev/1c1732696e98
branches:
changeset: 922:1c1732696e98
user: Alexander Borisov <alexander.borisov@nginx.com>
date: Tue Apr 23 18:10:37 2019 +0300
description:
Added macro for converting surrogate pair to code point.

diffstat:

njs/njs_json.c | 2 +-
njs/njs_parser_terminal.c | 8 ++------
njs/njs_string.h | 4 ++++
3 files changed, 7 insertions(+), 7 deletions(-)

diffs (57 lines):

diff -r 724c31e77d2a -r 1c1732696e98 njs/njs_json.c
--- a/njs/njs_json.c Mon Apr 22 16:23:50 2019 +0300
+++ b/njs/njs_json.c Tue Apr 23 18:10:37 2019 +0300
@@ -820,7 +820,7 @@ njs_json_parse_string(njs_json_parse_ctx
return NULL;
}

- utf = 0x10000 + ((utf - 0xd800) << 10) + (utf_low - 0xdc00);
+ utf = njs_string_surrogate_pair(utf, utf_low);
}

s = nxt_utf8_encode(s, utf);
diff -r 724c31e77d2a -r 1c1732696e98 njs/njs_parser_terminal.c
--- a/njs/njs_parser_terminal.c Mon Apr 22 16:23:50 2019 +0300
+++ b/njs/njs_parser_terminal.c Tue Apr 23 18:10:37 2019 +0300
@@ -1048,10 +1048,8 @@ njs_parser_escape_string_create(njs_vm_t
src++;
}

- /* Surrogate pair. */
-
if (cp_pair != 0) {
- cp = 0x10000 + ((cp_pair - 0xd800) << 10) + (cp - 0xdc00);
+ cp = njs_string_surrogate_pair(cp_pair, cp);
cp_pair = 0;

} else if (cp >= 0xd800 && cp <= 0xdfff) {
@@ -1184,14 +1182,12 @@ njs_parser_escape_string_calc_length(njs
}
}

- /* Surrogate pair. */
-
if (cp_pair != 0) {
if (nxt_slow_path(cp < 0xdc00 || cp > 0xdfff)) {
goto invalid_pair;
}

- cp = 0x10000 + ((cp_pair - 0xd800) << 10) + (cp - 0xdc00);
+ cp = njs_string_surrogate_pair(cp_pair, cp);
cp_pair = 0;

} else if (cp >= 0xd800 && cp <= 0xdfff) {
diff -r 724c31e77d2a -r 1c1732696e98 njs/njs_string.h
--- a/njs/njs_string.h Mon Apr 22 16:23:50 2019 +0300
+++ b/njs/njs_string.h Tue Apr 23 18:10:37 2019 +0300
@@ -27,6 +27,10 @@
/* The maximum signed int32_t. */
#define NJS_STRING_MAX_LENGTH 0x7fffffff

+/* Converting surrogate pair to code point. */
+#define njs_string_surrogate_pair(high, low) \
+ (0x10000 + ((high - 0xd800) << 10) + (low - 0xdc00))
+
/*
* NJS_STRING_MAP_STRIDE should be power of two to use shift and binary
* AND operations instead of division and remainder operations but no
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Added macro for converting surrogate pair to code point.

Alexander Borisov 407 April 23, 2019 11:12AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 166
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready