From 8c5d22848a118c034eb4b92e73985092a38afb14 Mon Sep 17 00:00:00 2001 From: luigi Date: Wed, 13 Jan 2016 19:04:10 +0000 Subject: [PATCH] sync with experimental git-svn-id: https://foundry.supelec.fr/svn/luatex/trunk@5704 0b2b3880-5936-4365-a048-eb17d2e5a6bf --- source/texk/web2c/luatexdir/font/luafont.w | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/source/texk/web2c/luatexdir/font/luafont.w b/source/texk/web2c/luatexdir/font/luafont.w index 294374922..6843cef5c 100644 --- a/source/texk/web2c/luatexdir/font/luafont.w +++ b/source/texk/web2c/luatexdir/font/luafont.w @@ -1050,16 +1050,15 @@ static void font_char_from_lua(lua_State * L, internal_font_number f, int i, int u = lua_tointeger(L,-1); if (u < 0) { set_charinfo_tounicode(co, NULL); - } else if (u < 0x10000) { + } else if (u < 0xD7FF || (u > 0xDFFF && u <= 0xFFFF)) { char *s = malloc(5); sprintf(s,"%04X",(unsigned int) u); set_charinfo_tounicode(co,s); - } else if (u < 0x1FFFFFFF) { + } else { char *s = malloc(9); - sprintf(s,"%04X%04X",(unsigned int) (floor(u/1024)),(unsigned int) (u%1024+0xDC00)); + u = u - 0x10000; + sprintf(s,"%04X%04X",(unsigned int) (floor(u/1024)+0xD800),(unsigned int) (u%1024+0xDC00)); set_charinfo_tounicode(co,s); - } else { - set_charinfo_tounicode(co, NULL); } } else if (u == LUA_TTABLE) { n = lua_rawlen(L,-1); @@ -1076,14 +1075,10 @@ static void font_char_from_lua(lua_State * L, internal_font_number f, int i, int u = -1; lua_pop(L, 1); break; - } else if (u < 0x10000) { + } else if (u < 0xD7FF || (u > 0xDFFF && u <= 0xFFFF)) { u = u + 4; - } else if (u < 0x1FFFFFFF) { - u = u + 8; } else { - u = -1; - lua_pop(L, 1); - break; + u = u + 8; } lua_pop(L, 1); } @@ -1093,11 +1088,12 @@ static void font_char_from_lua(lua_State * L, internal_font_number f, int i, int for (k = 1; k <= n; k++) { lua_rawgeti(L, -1, k); u = lua_tointeger(L,-1); - if (u < 0x10000) { + if (u < 0xD7FF || (u > 0xDFFF && u <= 0xFFFF)) { sprintf(t,"%04X",(unsigned int) u); t += 4; } else { - sprintf(t,"%04X%04X",(unsigned int) (floor(u/1024)),(unsigned int) (u%1024+0xDC00)); + u = u - 0x10000; + sprintf(t,"%04X%04X",(unsigned int) (floor(u/1024)+0xD800),(unsigned int) (u%1024+0xDC00)); t += 8; } lua_pop(L, 1); -- 2.11.4.GIT