Module:Sandbox/Erutuon/UTF-8

From blackwiki
< Module:Sandbox‎ | Erutuon
Revision as of 05:09, 17 September 2017 by blackwiki>Erutuon (newbie mistake)
Jump to navigation Jump to search

An experiment with printing binary digit representations of characters.

Usage

01100001 01111110 11000010 10100001 11000011 10100001 11001110 10110001 11100001 10111110 10110000 11110000 10100000 10000000 10000000



local p = {}

local bit = require("bit32")
local band = bit.band
local rshift = bit.rshift

local function getBits(byte)
    local t = {}
    for bit = 8, 1, -1 do
        t[bit] = band(byte, 1)
        byte = rshift(byte, 1)
    end
    return t
end

local function iterBytes(str, func)
    local out = {}
    for i = 1, #str do
        table.insert(out, func(string.byte(str, i)))
    end
    return out
end

function p.show(frame)
	local str = frame.args[1] or "ᾰ̓τῑμᾰ́ζω"
    return table.concat(
        iterBytes(
            str,
            function(byte)
                return table.concat(getBits(byte))
            end
        ),
        " "
    )
end

return p