היחידה מספקת שתי פונקציות, לשימוש ביחידות אחרות. שתי הפונקציות עושות encode ו-decode ל-Base64. פונקציית ה-decode מקבלת שני פרמטרים, הראשון שולט על פענוח decodeURIComponent, והשני שולט על פענוח JSON: אם הפרמטר השני מתפרש כ-true, הקריאה תנסה להפוך JSON לטבלה של לואה, כפי שמתואר ב-mw:Extension:Scribunto/Lua reference manual#mw.text.jsonDecode.

דוגמה לשימוש

local parser = require( 'Module:Base64' )

-- encoding a string into base64 blob

local blob = parser.encode( "some arbitrary string. must be string (made of 8-bit chars) and not ustring!" )

-- received a a blob from somewhere
local str = parser.decode( blob )

-- received a blob that represents ustring encoded with encodeURIComponent
local ustr = parser.decode( blob, true )

-- received a blob that represents json structure containing ustrings encoded with encodeURIComponent
local luaTable = parser.decode( blob, true, true )

קוד היחידה


--[[
following snippet copied from http://lua-users.org/wiki/BaseSixtyFour
and is published under GPL' which should be compatible enough with CC.

-- Lua 5.1+ base64 v3.0 (c) 2009 by Alex Kloss <alexthkloss@web.de>
-- licensed under the terms of the LGPL2
-- character table string
]]

local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

-- encoding
local enc = function(data)
    return ((data:gsub('.', function(x) 
        local r,b='',x:byte()
        for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
        return r;
    end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
        if (#x < 6) then return '' end
        local c=0
        for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
        return b:sub(c+1,c+1)
    end)..({ '', '==', '=' })[#data%3+1])
end


-- decoding
-- the two extra parameters ar not in original code. added for hewiki.
local dec = function(data, uridecode, jsondecode)
    data = string.gsub(data, '[^'..b..'=]', '')
    local result = (data:gsub('.', function(x)
        if (x == '=') then return '' end
        local r,f='',(b:find(x)-1)
        for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end
        return r;
    end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
        if (#x ~= 8) then return '' end
        local c=0
        for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end
        return string.char(c)
    end))
    

-- next 3 lines added for hewiki. original code had "return" instead of "local result".    
	result = ( uridecode and mw.uri.decode( result ) ) or result
	result = ( jsondecode and mw.text.jsonDecode( result ) ) or result
	return result
end


return { ["encode"] = enc, ["decode"] = dec }