------------------------------------------------------ -- GFWUtils.lua -- Useful utility / debug functions ------------------------------------------------------ GFWUTILS_THIS_VERSION = 8; ------------------------------------------------------ -- Shortcuts for common text color codes function GFWUtils_temp_HiliteText(text) if (text == nil) then return nil; end return HIGHLIGHT_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; end function GFWUtils_temp_RedText(text) if (text == nil) then return nil; end return RED_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; end function GFWUtils_temp_GrayText(text) if (text == nil) then return nil; end return GRAY_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; end function GFWUtils_temp_LightYellowText(text) if (text == nil) then return nil; end return LIGHTYELLOW_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE; end -- Prints a message to the chat frame function GFWUtils_temp_Print(message, r, g, b) DEFAULT_CHAT_FRAME:AddMessage(message, (r or GFW_FONT_COLOR.r), (g or GFW_FONT_COLOR.g), (b or GFW_FONT_COLOR.b)); end -- Prints a message to the chat frame once per interval (seconds) or once per session if interval is nil function GFWUtils_temp_PrintOnce(message, interval, r, g, b) if (GFWUtils.PrintOnceCache == nil) then GFWUtils.PrintOnceCache = {}; end if (interval == nil and GFWUtils.PrintOnceCache[message]) then return; end if (interval and GFWUtils.PrintOnceCache[message] and GetTime() - GFWUtils.PrintOnceCache[message] < interval) then return; end DEFAULT_CHAT_FRAME:AddMessage(message, (r or GFW_FONT_COLOR.r), (g or GFW_FONT_COLOR.g), (b or GFW_FONT_COLOR.b)); GFWUtils.PrintOnceCache[message] = GetTime(); end -- Prints a message to the chat frame only if Debug is set function GFWUtils_temp_DebugLog(message) if (GFWUtils.Debug) then DEFAULT_CHAT_FRAME:AddMessage(message, GFW_DEBUG_COLOR.r, GFW_DEBUG_COLOR.g, GFW_DEBUG_COLOR.b); end end -- Prints a message in yellow to the floating messages frame function GFWUtils_temp_Note(message) UIErrorsFrame:AddMessage(message, 1.0, 1.0, 0.0, 1.0, UIERRORS_HOLD_TIME); end -- Converts string.format to a string.find pattern: "%s hits %s for %d." to "(.+) hits (.+) for (%d+)" -- based on Recap by Gello function GFWUtils_temp_FormatToPattern(formatString) local patternString = formatString; patternString = string.gsub(patternString, "%%%d+%$([diouXxfgbcsq])", "%%%1"); -- reordering specifiers (e.g. %2$s) stripped patternString = string.gsub(patternString, "([%$%(%)%.%[%]%*%+%-%?%^])", "%%%1"); -- convert regex special characters patternString = string.gsub(patternString, "%%c", "(.)"); -- %c to (.) patternString = string.gsub(patternString, "%%s", "(.+)"); -- %s to (.+) patternString = string.gsub(patternString, "%%[du]", "(%%d+)"); -- %d to (%d+) patternString = string.gsub(patternString, "%%([gf])", "(%%d+%%.*%%d*)"); -- %g or %f to (%d+%.*%d*) return patternString; end -- Splits a string into a table of strings separated by 'separator'. -- e.g. Split(aString, ", ") is the reverse of table.concat(aTable, ", ") function GFWUtils_temp_Split(aString, separator) if (aString == nil) then return nil; end local t = {}; local function helper(segment) table.insert(t, segment); end helper((string.gsub(aString, "(.-)"..separator, helper))); return t; end -- Capitalizes the first letter of each word in aString. function GFWUtils_temp_TitleCase(aString) if (aString == nil) then return nil; end local function capWords(first, rest) return string.upper(first)..string.lower(rest); end return string.gsub(aString, "(%w)([%w_']*)", capWords); end -- Splits a cash amount into gold, siver, and copper function GFWUtils_temp_GSC(money) if (money == nil) then money = 0; end local g = math.floor(money / 10000); local s = math.floor((money - (g*10000)) / 100); local c = math.floor(money - (g*10000) - (s*100)); return g,s,c; end -- Formats money text by color for gold, silver, copper -- discards copper for amounts greater than 1g unless second arg evaluates true -- based on Auctioneer function GFWUtils_temp_TextGSC(money, noRound) local GSC_GOLD="ffd100"; local GSC_SILVER="e6e6e6"; local GSC_COPPER="c8602c"; local GSC_START="|cff%s%d%s|r"; local GSC_PART=" |cff%s%02d%s|r"; local GSC_NONE="|cffa0a0a0none|r"; local g, s, c = GFWUtils.GSC(money); local gsc = ""; if (g > 0) then gsc = format(GSC_START, GSC_GOLD, g, "g"); if (s > 0) then gsc = gsc..format(GSC_PART, GSC_SILVER, s, "s"); if (noRound and c > 0) then gsc = gsc..format(GSC_PART, GSC_COPPER, c, "c"); end end elseif (s > 0) then gsc = format(GSC_START, GSC_SILVER, s, "s"); if (c > 0) then gsc = gsc..format(GSC_PART, GSC_COPPER, c, "c"); end elseif (c > 0) then gsc = gsc..format(GSC_START, GSC_COPPER, c, "c"); else gsc = GSC_NONE; end return gsc; end function GFWUtils_temp_ItemLink(linkInfo) local sName, sLink, iQuality, iLevel, sType, sSubType, iCount = GetItemInfo(linkInfo); if (sName) then local _, _, _, color = GetItemQualityColor(iQuality); local linkFormat = "%s|H%s|h[%s]|h|r"; return string.format(linkFormat, color, sLink, sName); else return nil; end end ------------------------------------------------------ -- load only if not already loaded ------------------------------------------------------ if (GFWUtils == nil) then GFWUtils = {}; end local G = GFWUtils; if (G.Version == nil or (tonumber(G.Version) ~= nil and G.Version < GFWUTILS_THIS_VERSION)) then -- Constants GFW_FONT_COLOR = {r=0.25, g=1.0, b=1.0}; GFW_DEBUG_COLOR = {r=1.0, g=0.75, b=0.25}; G.Debug = false; -- Functions G.Hilite = GFWUtils_temp_HiliteText; G.Red = GFWUtils_temp_RedText; G.Gray = GFWUtils_temp_GrayText; G.LtY = GFWUtils_temp_LightYellowText; G.Print = GFWUtils_temp_Print; G.PrintOnce = GFWUtils_temp_PrintOnce; G.DebugLog = GFWUtils_temp_DebugLog; G.Note = GFWUtils_temp_Note; G.FormatToPattern = GFWUtils_temp_FormatToPattern; G.Split = GFWUtils_temp_Split; G.TitleCase = GFWUtils_temp_TitleCase; G.GSC = GFWUtils_temp_GSC; G.TextGSC = GFWUtils_temp_TextGSC; G.ItemLink = GFWUtils_temp_ItemLink; -- Set version number G.Version = GFWUTILS_THIS_VERSION; end