Module:Emoji

require ('strict');

local data = mw.loadData ('Module:Emoji/data');

--[[--------------------------< E M O C O D E >----------------------------------------------------------------

return the hexadecimal code associated with an emoji's name

{{#invoke:Emoji|emocode|smiley}} → 1f603

When the specified name does not exist in the data table, returns the unrecognized name

If a name is not provided, returns 'smiley' (1f603)

TODO: return error messages; don't camouflage the erroneous or missing input

]]

local function emocode (frame)

local emoji_name = mw.text.trim(frame.args[1] or "") -- make sure empty and missing parameters both become the empty string

emoji_name = emoji_name:lower(); -- down case because names in table are all lowercase

emoji_name = emoji_name:gsub ('%s+', '_'); -- replace whitespace with underscore

if '' == emoji_name then emoji_name = 'smiley' end -- use default value of 'smiley' if parameter is empty or missing

return data.emoji_hex_from_name_t[emoji_name] or emoji_name

end

--[[--------------------------< E M O N A M E >----------------------------------------------------------------

return the emoji's name associated with a particular hexadecimal code

{{#invoke:Emoji|emoname|1f603}} → smiley

When the specified hexadecimal code does not exist in the data table, returns the unrecognized code

If a hexadecimal code is not provided, returns '1f603' (smiley)

TODO: return error messages; don't camouflage the erroneous or missing input

]]

local function emoname (frame)

local emoji_code = mw.text.trim(frame.args[1] or "") -- make sure empty and missing parameters both become the empty string

emoji_code = emoji_code:lower(); -- down case because codes in table are all lowercase

if '' == emoji_code then emoji_code = '1f603' end -- use default value of '1f603' if parameter is empty or missing

return data.emoji_name_from_hex_t[emoji_code] or emoji_code

end

--[[--------------------------< E X P O R T S >----------------------------------------------------------------

]]

return {

emocode = emocode,

emoname = emoname,

}