Module:Annotated link

local function pipedLink(name, display) return ''..display..'' end

local function isEmpty(value) return value == nil or value == '' end

local function notEmpty(value) return not isEmpty(value) end

-- Unescape functionality grabbed from https://stackoverflow.com/a/14899740/1832568

local function unescape(str)

str = string.gsub(str, '&#(%d+);', string.char)

str = string.gsub(str, '&#x(%d+);', function(d) return string.char(tonumber(d, 16)) end)

return str

end

local function hashDelimitedList(list_string) return mw.text.gsplit(unescape(list_string), '%s*#%s*') end

local function alarmingMessage(message)

return 'Module:Annotated link '..message..'.'..

'Category:Pages displaying alarming messages about Module:Annotated link'

end

local function optionallyVisibleCategory(class, category)

return '

'Category:'..category..' via Module:Annotated link'

end

local function handleFirstLetterCase(short_description, case)

return mw.ustring.gsub(short_description, '^([^%d])', function(first_char)

if case == 'upper' then

return mw.ustring.upper(first_char)

end

return mw.ustring.lower(first_char) end

)

end

local mLang = require('Module:Lang')

local function langify(args)

local lang = args.lang

local text = args.text

if isEmpty(lang) or lang == 'en' then

return text

end

return mLang._lang {

lang,

text,

italic = args.italic,

nocat = args.nocat,

size = args.size,

cat = args.cat,

rtl = args.rtl

}

end

local function formatResult(result, dash, description, prefix_parentheses)

if notEmpty(description) then

if prefix_parentheses then

local startIdx = description:find("%(")

if startIdx then

local beforeParens = description:sub(1, startIdx - 2)

local insideParens = description:sub(startIdx, -1)

return result..' '..insideParens..dash..' '..beforeParens

end

end

return result..dash..' '..description

end

return result

end

local function annotatedLink(args)

local name = args.name

if isEmpty(name) then

return alarmingMessage('requires a page name (including namespace)')

end

-- In order to handle an attempt to annotate a template link

-- already formatted with the likes of {{tl|