Skip to content

Commit

Permalink
Fixed codepoint_to_utf8()'s string.char usage for Lua5.3
Browse files Browse the repository at this point in the history
Lua5.3 requires that string.char's arguments are integers (<=5.2 and JIT
do not)
  • Loading branch information
rxi committed Aug 15, 2015
1 parent b51b7a5 commit 3cfffd2
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions json.lua
Original file line number Diff line number Diff line change
Expand Up @@ -163,15 +163,16 @@ end

local function codepoint_to_utf8(n)
-- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
local f = math.floor
if n <= 0x7f then
return string.char(n)
elseif n <= 0x7ff then
return string.char(n / 64 + 192, n % 64 + 128)
return string.char(f(n / 64) + 192, n % 64 + 128)
elseif n <= 0xffff then
return string.char(n / 4096 + 224, n % 4096 / 64 + 128, n % 64 + 128)
return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
elseif n <= 0x10ffff then
return string.char(n / 262144 + 240, n % 262144 / 4096 + 128,
n % 4096 / 64 + 128, n % 64 + 128)
return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
f(n % 4096 / 64) + 128, n % 64 + 128)
end
error( string.format("invalid unicode codepoint '%x'", n) )
end
Expand Down

0 comments on commit 3cfffd2

Please sign in to comment.