Module:UIText

--Get Required Modules local getArgs = require('Module:Arguments').getArgs local multiRequire = require('Module:MultiRequire').multiRequire local string, table, lu, yesno = multiRequire('Module:String', 'Module:Table', 'Module:LibraryUtil', 'Module:Yesno') local statAliases, rarityAliases, rarityData, data = multiRequire('Module:Statname/aliases', 'Module:RarityTier/Aliases', 'Module:RarityTier/Data', 'Module:UIText/Data') local potionAliases, potionData, enchantData, enchantAliases = multiRequire('Module:Link/potion/Aliases', 'Module:Link/potion/Data', 'Module:Link/enchantmentsLink/Data', 'Module:Link/enchantmentsLink/Aliases')

--Begin Exports local p = {}

local characters = data.characters local statColors = data.statColors local rarityColors = data.rarityColors local tooltipFormatting = data.tooltipFormatting

for k, v in ipairs(potionData) do	potionData[k].color = v.color:gsub('([A-Z])', function(l)		return '_'..l:lower	end) end

function p.applyReplacements(val) local function replaceRarities(rarityName) local rarity = rarityAliases[string.trim((rarityName:lower:gsub('%s', ' ')))] if not stat then return "\\rarity{" ..rarityName.. "}"		end return ('&%s&l%s&r'):format(p.getRarityColor(rarity), rarityData[rarity].name) end local function replaceStats(statname) local prefix = statname:match('^([%-%+]?[%.%dkm,]+%%?)%s*') statname = string.trim((statname:gsub('^([%-%+]?[%.%dkm,]+%%?)%s*', ''))) stat = statAliases[statname:lower:gsub('%s', ' ')] if not stat then return "\\stat{" ..statname.. "}"		end return ('&%s%s%s %s&r'):format(tooltipFormatting[statColors[stat]], prefix and prefix..' ' or '', characters[stat], string.ucfirst(stat)) end local function replacePotions(potionName) local oldPot = potion local suffix = potion:match('%s+([ivxIVX%d]+)') local potPrefix = potion:match('%s*[Pp]oti?o?n?') local potion = potionAliases[string.trim(potionName:gsub('%s+([ivxIVX%d]+)', ):gsub('%s+[Pp]oti?o?n?', ):lower)] local n = string._toNumber(suffix or '') if not potion or (n and n > potionData[potion].maxLevel) then return '\\potion{'..potionName..'}' end return ('&%s%s%s%s&r'):format(tooltipFormatting[potionData[potion].color:lower], potion, suffix and ' '..string._toRoman(suffix) or , potPrefix and ' Potion' or ) end local function replaceEnchants(enchantName) local oldEnch = enchantName local suffix = enchantName:match('%s+([ivxIVX%d]+)') local enchant = enchantAliases[string.trim(enchantName:gsub('%s+[Ee]ncha?n?t?m?e?n?t?s?', ):gsub('%s+([ivxIVX%d]+)', ):lower)] local n = string._toNumber(suffix or '') if not enchant then return '\\enchant{'..enchantName..'}' end assertFalse(n and n > enchantData[enchant].max, 'Enchantment escape "\\enchant{%s}" is out of range (max is %s, got %s)', 4, oldEnch, enchantData[enchant].max, n)		return ('&9%s%s&r'):format(enchant, suffix and ' '..string._toRoman(suffix) or '') end return (string.unicodeConvert(val)		:gsub('\\sta?t?%{(.-)%}', replaceStats)		:gsub('\\poti?o?n?%{(.-)%}', replacePotions)		:gsub('\\ra?r?i?t?y?%{(.-)%}', replaceRarities)		:gsub('\\ench?a?n?t?m?e?n?t?%{(.-)%}', replaceEnchants)	) end - -- Temlate: UIText -- -- Makes making UI's alot easier - function p.main(frame) local args = getArgs(frame) local val = args[1] or args["t"] or args["text"]

return string.pcall(p._main, val) end - -- Template: UIText Module access point - function p._main(val) checkType(1, val, 'string') return (p.applyReplacements(val)		:gsub('/', '\\/')		:gsub('\n', '/')		:gsub('\\r', '\r')		:gsub('\\t', '\t')		:gsub('\\v', '\v')		:gsub('\\b', '\b')		:gsub('\\n', '/')	) end

- -- function: getRarityColor(rarity: string) -- -- Gets the In-game color code of a rarity - function p.getRarityColor(rarity) checkType(1, rarity, { 'string' }) return tooltipFormatting[rarityColors[rarityAliases[string.trim(rarity:lower):gsub('%s', ' ')]]] end

- -- function: getStatColor(rarity: string) -- -- Gets the In-game color code of a stat - function p.getStatColor(statname) checkType(1, statname, { 'string' }) return tooltipFormatting[statColors[statAliases[string.trim(statname:lower):gsub('%s', ' ')]]] end

- -- function: getTooltipFormatting(color: string, text: string, noAmpersand: boolean) -- -- Gets the In-game tooltip formatting - function p.getTooltipFormatting(color, text, noAmpersand) checkType(1, color, { 'string' }) checkType(2, text, { 'string', 'table', 'number' }, true) noAmp = noAmpersand or false color = string.trim(string.lower(color)) color = tooltipFormatting[string.gsub(color, ' ', '_')] or color return (noAmp and  or '&')..color..(text or ) end

--Finish Module/Exports return p