---------------------------------------------------------------------------------- --- Mudlet GUI Utils ---------------------------------------------------------------------------------- --- The gaugesTable table. First we need to make this table which will be --- used later to store important data in. --- --- @class function --- @name gaugesTable gaugesTable = {} --- The color_table table holds definition of color names. These are intended to be -- used in conjunction with fg() and bg() colorizer functions. -- Mudlet's original table - going back a few years - differs from the -- "standard" which can be found at https://www.w3.org/TR/SVG11/types.html#ColorKeywords -- Mudlet has additional colours not in the standard: -- "light_goldenrod", "light_slate_blue", "navy_blue" and "violet_red" -- Mudlet is missing some colours: -- "aqua", "fuchsia", "dark_blue", "dark_cyan", "dark_gray"/"dark_grey", -- "dark_magenta", "dark_red", "indigo", "light_green", "olive", "silver", -- "teal", "violet_red" -- Also Mudlet redefines: -- "gray"/"grey", "green", "maroon" and "purple" -- All of the above also implies the Camel Case equivalents; in summary: -- Colour Mudlet Web Standard -- aqua 0, 255, 255 -- fuchsia 255, 0, 255 -- dark_blue 0, 0, 139 -- dark_gray/dark_grey 169, 169, 169 -- dark_magenta 139, 0, 139 -- dark_red 139, 0, 0 -- gray/grey 190, 190, 190 128, 128, 128 -- green 0, 255, 0 0, 128, 0 -- indigo 75, 0, 130 -- light_goldrod 238, 221, 130 -- light_slate_blue 132, 112, 255 -- light_green 144, 238, 144 -- maroon 176, 48, 96 128, 0, 0 -- navy_blue 0, 0, 128 -- olive 128, 128, 0 -- purple 160, 32, 240 128, 0, 128 -- silver 192, 192, 192 -- teal 0, 128, 128 -- violet_red 208, 32, 240 -- @see showColors -- @see bg -- @see fg -- @class function -- @name color_table color_table = { alice_blue = {240, 248, 255}, AliceBlue = {240, 248, 255}, antique_white = {250, 235, 215}, AntiqueWhite = {250, 235, 215}, aquamarine = {127, 255, 212}, azure = {240, 255, 255}, beige = {245, 245, 220}, bisque = {255, 228, 196}, black = {0, 0, 0}, blanched_almond = {255, 235, 205}, BlanchedAlmond = {255, 235, 205}, blue = {0, 0, 255}, blue_violet = {138, 43, 226}, BlueViolet = {138, 43, 226}, brown = {165, 42, 42}, burlywood = {222, 184, 135}, cadet_blue = {95, 158, 160}, CadetBlue = {95, 158, 160}, chartreuse = {127, 255, 0}, chocolate = {210, 105, 30}, coral = {255, 127, 80}, cornflower_blue = {100, 149, 237}, CornflowerBlue = {100, 149, 237}, cornsilk = {255, 248, 220}, cyan = {0, 255, 255}, dark_goldenrod = {184, 134, 11}, DarkGoldenrod = {184, 134, 11}, dark_green = {0, 100, 0}, DarkGreen = {0, 100, 0}, dark_khaki = {189, 183, 107}, DarkKhaki = {189, 183, 107}, dark_olive_green = {85, 107, 47}, DarkOliveGreen = {85, 107, 47}, dark_orange = {255, 140, 0}, DarkOrange = {255, 140, 0}, dark_orchid = {153, 50, 204}, DarkOrchid = {153, 50, 204}, dark_salmon = {233, 150, 122}, DarkSalmon = {233, 150, 122}, dark_slate_blue = {72, 61, 139}, dark_sea_green = {143, 188, 143}, DarkSeaGreen = {143, 188, 143}, DarkSlateBlue = {72, 61, 139}, dark_slate_gray = {47, 79, 79}, DarkSlateGray = {47, 79, 79}, dark_slate_grey = {47, 79, 79}, DarkSlateGrey = {47, 79, 79}, dark_turquoise = {0, 206, 209}, DarkTurquoise = {0, 206, 209}, dark_violet = {148, 0, 211}, DarkViolet = {148, 0, 211}, deep_pink = {255, 20, 147}, DeepPink = {255, 20, 147}, deep_sky_blue = {0, 191, 255}, DeepSkyBlue = {0, 191, 255}, dodger_blue = {30, 144, 255}, DodgerBlue = {30, 144, 255}, dim_gray = {105, 105, 105}, DimGray = {105, 105, 105}, dim_grey = {105, 105, 105}, DimGrey = {105, 105, 105}, firebrick = {178, 34, 34}, floral_white = {255, 250, 240}, FloralWhite = {255, 250, 240}, forest_green = {34, 139, 34}, ForestGreen = {34, 139, 34}, gainsboro = {220, 220, 220}, ghost_white = {248, 248, 255}, GhostWhite = {248, 248, 255}, gold = {255, 215, 0}, goldenrod = {218, 165, 32}, gray = {190, 190, 190}, grey = {190, 190, 190}, green = {0, 255, 0}, green_yellow = {173, 255, 47}, GreenYellow = {173, 255, 47}, honeydew = {240, 255, 240}, hot_pink = {255, 105, 180}, HotPink = {255, 105, 180}, indian_red = {205, 92, 92}, IndianRed = {205, 92, 92}, khaki = {240, 230, 140}, ivory = {255, 255, 240}, lavender = {230, 230, 250}, lavender_blush = {255, 240, 245}, LavenderBlush = {255, 240, 245}, lawn_green = {124, 252, 0}, LawnGreen = {124, 252, 0}, lemon_chiffon = {255, 250, 205}, LemonChiffon = {255, 250, 205}, light_blue = {173, 216, 230}, LightBlue = {173, 216, 230}, light_coral = {240, 128, 128}, LightCoral = {240, 128, 128}, light_cyan = {224, 255, 255}, LightCyan = {224, 255, 255}, light_goldenrod = {238, 221, 130}, LightGoldenrod = {238, 221, 130}, light_goldenrod_yellow= {250, 250, 210}, LightGoldenrodYellow = {250, 250, 210}, light_gray = {211, 211, 211}, LightGray = {211, 211, 211}, light_grey = {211, 211, 211}, LightGrey = {211, 211, 211}, light_pink = {255, 182, 193}, LightPink = {255, 182, 193}, light_salmon = {255, 160, 122}, LightSalmon = {255, 160, 122}, light_sea_green = {32, 178, 170}, LightSeaGreen = {32, 178, 170}, light_sky_blue = {135, 206, 250}, LightSkyBlue = {135, 206, 250}, light_slate_blue = {132, 112, 255}, LightSlateBlue = {132, 112, 255}, light_slate_gray = {119, 136, 153}, LightSlateGray = {119, 136, 153}, light_slate_grey = {119, 136, 153}, LightSlateGrey = {119, 136, 153}, light_steel_blue = {176, 196, 222}, LightSteelBlue = {176, 196, 222}, light_yellow = {255, 255, 224}, LightYellow = {255, 255, 224}, lime_green = {50, 205, 50}, LimeGreen = {50, 205, 50}, linen = {250, 240, 230}, magenta = {255, 0, 255}, maroon = {176, 48, 96}, medium_aquamarine = {102, 205, 170}, MediumAquamarine = {102, 205, 170}, medium_blue = {0, 0, 205}, MediumBlue = {0, 0, 205}, medium_orchid = {186, 85, 211}, MediumOrchid = {186, 85, 211}, medium_purple = {147, 112, 219}, MediumPurple = {147, 112, 219}, medium_sea_green = {60, 179, 113}, MediumSeaGreen = {60, 179, 113}, medium_slate_blue = {123, 104, 238}, MediumSlateBlue = {123, 104, 238}, medium_spring_green = {0, 250, 154}, MediumSpringGreen = {0, 250, 154}, medium_turquoise = {72, 209, 204}, MediumTurquoise = {72, 209, 204}, medium_violet_red = {199, 21, 133}, MediumVioletRed = {199, 21, 133}, midnight_blue = {25, 25, 112}, MidnightBlue = {25, 25, 112}, mint_cream = {245, 255, 250}, MintCream = {245, 255, 250}, misty_rose = {255, 228, 225}, MistyRose = {255, 228, 225}, moccasin = {255, 228, 181}, navajo_white = {255, 222, 173}, NavajoWhite = {255, 222, 173}, navy = {0, 0, 128}, navy_blue = {0, 0, 128}, NavyBlue = {0, 0, 128}, old_lace = {253, 245, 230}, OldLace = {253, 245, 230}, olive_drab = {107, 142, 35}, OliveDrab = {107, 142, 35}, orange = {255, 165, 0}, orange_red = {255, 69, 0}, OrangeRed = {255, 69, 0}, orchid = {218, 112, 214}, pale_goldenrod = {238, 232, 170}, PaleGoldenrod = {238, 232, 170}, pale_green = {152, 251, 152}, PaleGreen = {152, 251, 152}, pale_turquoise = {175, 238, 238}, PaleTurquoise = {175, 238, 238}, pale_violet_red = {219, 112, 147}, PaleVioletRed = {219, 112, 147}, papaya_whip = {255, 239, 213}, PapayaWhip = {255, 239, 213}, peach_puff = {255, 218, 185}, PeachPuff = {255, 218, 185}, peru = {205, 133, 63}, pink = {255, 192, 203}, plum = {221, 160, 221}, powder_blue = {176, 224, 230}, PowderBlue = {176, 224, 230}, purple = {160, 32, 240}, royal_blue = {65, 105, 225}, RoyalBlue = {65, 105, 225}, red = {255, 0, 0}, rosy_brown = {188, 143, 143}, RosyBrown = {188, 143, 143}, saddle_brown = {139, 69, 19}, SaddleBrown = {139, 69, 19}, salmon = {250, 128, 114}, sandy_brown = {244, 164, 96}, SandyBrown = {244, 164, 96}, sea_green = {46, 139, 87}, SeaGreen = {46, 139, 87}, seashell = {255, 245, 238}, sienna = {160, 82, 45}, sky_blue = {135, 206, 235}, SkyBlue = {135, 206, 235}, slate_blue = {106, 90, 205}, SlateBlue = {106, 90, 205}, slate_gray = {112, 128, 144}, SlateGray = {112, 128, 144}, slate_grey = {112, 128, 144}, SlateGrey = {112, 128, 144}, snow = {255, 250, 250}, steel_blue = {70, 130, 180}, SteelBlue = {70, 130, 180}, spring_green = {0, 255, 127}, SpringGreen = {0, 255, 127}, tan = {210, 180, 140}, thistle = {216, 191, 216}, tomato = {255, 99, 71}, turquoise = {64, 224, 208}, violet_red = {208, 32, 144}, VioletRed = {208, 32, 144}, violet = {238, 130, 238}, wheat = {245, 222, 179}, white = {255, 255, 255}, white_smoke = {245, 245, 245}, WhiteSmoke = {245, 245, 245}, yellow = {255, 255, 0}, yellow_green = {154, 205, 50}, YellowGreen = {154, 205, 50} } --- Move a custom gauge. --- --- @usage This would move the health bar gauge to the location 1200, 400. ---
--- moveGauge("healthBar", 1200, 400)
---
---
--- @see createGauge
function moveGauge(gaugeName, x, y)
assert(gaugesTable[gaugeName], "moveGauge: no such gauge exists.")
assert(x and y, "moveGauge: need to have both X and Y dimensions.")
moveWindow(gaugeName .. "_back", x, y)
moveWindow(gaugeName .. "_text", x, y)
-- save new values in table
gaugesTable[gaugeName].x, gaugesTable[gaugeName].y = x, y
setGauge(gaugeName, gaugesTable[gaugeName].value, 1)
end
--- Hide a custom gauge.
---
--- @usage This should hide the given gauge.
---
--- hideGauge("healthBar")
---
---
--- @see createGauge, moveGauge, showGauge
function hideGauge(gaugeName)
assert(gaugesTable[gaugeName], "hideGauge: no such gauge exists.")
hideWindow(gaugeName .. "_back")
hideWindow(gaugeName .. "_front")
hideWindow(gaugeName .. "_text")
end
--- Show a custom gauge.
---
--- @usage This should show the given gauge.
---
--- showGauge("healthBar")
---
---
--- @see createGauge, moveGauge, hideGauge
function showGauge(gaugeName)
assert(gaugesTable[gaugeName], "showGauge: no such gauge exists.")
showWindow(gaugeName .. "_back")
showWindow(gaugeName .. "_front")
showWindow(gaugeName .. "_text")
end
--- Set the text on a custom gauge.
---
--- @usage
---
--- setGaugeText("healthBar", "HP: 100%", 40, 40, 40)
---
--- @usage
---
--- setGaugeText("healthBar", "HP: 100%", "red")
---
---
--- @param gaugeName
--- @param gaugeText An empty gaugeText will clear the text entirely.
--- @param color1 Colors are optional and will default to 0,0,0(black) if not passed as args.
--- @param color2
--- @param color3
---
--- @see createGauge
function setGaugeText(gaugeName, gaugeText, r, g, b)
assert(gaugesTable[gaugeName], "setGaugeText: no such gauge exists.")
if r ~= nil then
if g == nil then
r,g,b = getRGB(r)
end
else
r,g,b = 0,0,0
end
gaugeText = gaugeText or ""
local echoString = [[]] .. gaugeText .. [[]]
echo(gaugeName .. "_text", echoString)
-- save new values in table
gaugesTable[gaugeName].text = echoString
end
--- Pads a hex number to ensure a minimum of 2 digits.
---
--- @usage Following command will returns "F0".
---
--- PadHexNum("F")
---
function PadHexNum(incString)
local l_Return = incString
if tonumber(incString,16)<16 then
if tonumber(incString,16)<10 then
l_Return = "0" .. l_Return
elseif tonumber(incString,16)>10 then
l_Return = l_Return .. "0"
end
end
return l_Return
end
--- Converts an RGB value into an HTML compliant(label usable) HEX number.
--- This function is colorNames aware and can take any defined global color as its first argument.
---
--- @usage Both following commands will returns "FFFFFF".
---
--- RGB2Hex(255,255,255)
--- RGB2Hex("white")
---
---
--- @see showColor
function RGB2Hex(red, green, blue)
local l_Red, l_Green, l_Blue = 0,0,0
if green == nil then -- Not an RGB but a "color" instead!
l_Red, l_Green, l_Blue = getRGB(red)
else -- Nope, true color here
l_Red, l_Green, l_Blue = red, green, blue
end
return PadHexNum(string.format("%X",l_Red)) ..
PadHexNum(string.format("%X",l_Green)) ..
PadHexNum(string.format("%X",l_Blue))
end
--- Get RGB component from color name.
---
--- @usage Following will display "0.255.0" on your screen.
---
--- local red, green, blue = getRGB("green")
--- echo(red .. "." .. green .. "." .. blue )
---
function getRGB(colorName)
local red = color_table[colorName][1]
local green = color_table[colorName][2]
local blue = color_table[colorName][3]
return red, green, blue
end
--- Make your very own customized gauge with this function.
---
--- @usage This would make a gauge at that's 300px width, 20px in height, located at Xpos and Ypos and is green.
---
--- createGauge("healthBar", 300, 20, 30, 300, nil, 0, 255, 0)
---
--- @usage The second example is using the same names you'd use for something like fg() or bg().
---
--- createGauge("healthBar", 300, 20, 30, 300, nil, "green")
---
--- @usage Finally we'll add some text to our gauge.
---
--- createGauge("healthBar", 300, 20, 30, 300, "Now with some text", "green")
---
--- @usage You can add an orientation argument as well now:
---
--- createGauge("healthBar", 300, 20, 30, 300, "Now with some text", "green", "horizontal, vertical, goofy, or batty")
---
function createGauge(gaugeName, width, height, x, y, gaugeText, r, g, b, orientation)
gaugeText = gaugeText or ""
if type(r) == "string" then
orientation = g
r,g,b = getRGB(r)
elseif r == nil then
orientation = orientation or g
-- default colors
r,g,b = 128,128,128
end
orientation = orientation or "horizontal"
assert(table.contains({"horizontal","vertical","goofy","batty"},orientation), "createGauge: orientation must be horizontal, vertical, goofy, or batty")
local tbl = {width = width, height = height, x = x, y = y, text = gaugeText, r = r, g = g, b = b, orientation = orientation, value = 1}
createLabel(gaugeName .. "_back", 0,0,0,0,1)
setBackgroundColor(gaugeName .. "_back", r, g, b, 100)
createLabel(gaugeName .. "_front", 0,0,0,0,1)
setBackgroundColor(gaugeName .. "_front", r, g, b, 255)
createLabel(gaugeName .. "_text", 0,0,0,0,1)
setBackgroundColor(gaugeName .. "_text", 0, 0, 0, 0)
-- save new values in table
gaugesTable[gaugeName] = tbl
resizeGauge(gaugeName, tbl.width, tbl.height)
moveGauge(gaugeName, tbl.x, tbl.y)
setGaugeText(gaugeName, gaugeText, "black")
showGauge(gaugeName)
end
--- Use this function when you want to change the gauges look according to your values.
--- Typical usage would be in a prompt with your current health or whatever value, and throw
--- in some variables instead of the numbers.
---
--- @usage In that example, we'd change the looks of the gauge named healthBar and make it fill
--- to half of its capacity. The height is always remembered.
---
--- setGauge("healthBar", 200, 400)
---
--- @usage Change the text on your gauge.
---
--- setGauge("healthBar", 200, 400, "some text")
---
function setGauge(gaugeName, currentValue, maxValue, gaugeText)
assert(gaugesTable[gaugeName], "setGauge: no such gauge exists.")
assert(currentValue and maxValue, "setGauge: need to have both current and max values.")
local value = currentValue / maxValue
-- save new values in table
gaugesTable[gaugeName].value = value
local info = gaugesTable[gaugeName]
local x,y,w,h = info.x, info.y, info.width, info.height
if info.orientation == "horizontal" then
resizeWindow(gaugeName .. "_front", w * value, h)
moveWindow(gaugeName .. "_front", x, y)
elseif info.orientation == "vertical" then
resizeWindow(gaugeName .. "_front", w, h * value)
moveWindow(gaugeName .. "_front", x, y + h * (1 - value))
elseif info.orientation == "goofy" then
resizeWindow(gaugeName .. "_front", w * value, h)
moveWindow(gaugeName .. "_front", x + w * (1 - value), y)
elseif info.orientation == "batty" then
resizeWindow(gaugeName .. "_front", w, h * value)
moveWindow(gaugeName .. "_front", x, y)
end
if gaugeText then
setGaugeText(gaugeName, gaugeText)
end
end
--- Make a new console window with ease. The default background is black and text color white.
--- If you wish to change the color you can easily do this when updating your text or manually somewhere, using
--- setFgColor() and setBackgroundColor().
---
--- @usage This will create a miniconsole window that has a font size of 8pt, will display 80 characters in width,
--- hold a maximum of 20 lines and be place at 200x400 of your Mudlet window.
---
--- createConsole("myConsoleWindow", 8, 80, 20, 200, 400)
---
function createConsole(consoleName, fontSize, charsPerLine, numberOfLines, Xpos, Ypos)
createMiniConsole(consoleName,0,0,1,1)
setMiniConsoleFontSize(consoleName, fontSize)
local x,y = calcFontSize( fontSize )
resizeWindow(consoleName, x*charsPerLine, y*numberOfLines)
setWindowWrap(consoleName, charsPerLine)
moveWindow(consoleName, Xpos, Ypos)
setBackgroundColor(consoleName,0,0,0,0)
setFgColor(consoleName, 255,255,255)
end
--- Suffixes text at the end of the current line when used in a trigger.
---
--- @see prefix
function suffix(what, func, fg, bg, window)
local length = string.len(line)
moveCursor(window or "main", length-1, getLineNumber())
if func and (func == cecho or func == decho or func == hecho) then
func(what, fg, bg, true, window)
else
insertText(what)
end
end
--- Prefixes text at the beginning of the current line when used in a trigger.
---
--- @usage Prefix the hours, minutes and seconds onto our prompt even though Mudlet has a button for that.
---
--- prefix(os.date("%H:%M:%S "))
---
---
--- @see suffix
function prefix(what, func, fg, bg, window)
moveCursor(window or "main", 0, getLineNumber());
if func and (func == cecho or func == decho or func == hecho) then
func(what, fg, bg, true, window)
else
insertText(what)
end
end
--- Function will gag the whole line. Use deleteLine() instead.
function gagLine()
deleteLine()
end
--- Replaces all occurrences of what in the current line with with.
---
--- @usage This will replace all occurrences of John with the word Doe.
---
--- replaceAll("John", "Doe")
---
--- -- also handles recursive matches:
--- replaceAll("you", "you and me")
---
function replaceAll(word, what)
local startp, endp = 1, 1
while true do
startp, endp = getCurrentLine():find(word, endp+(#what-#word)+1)
if not startp then break end
selectSection(startp-1, endp-startp+1)
replace(what)
end
end
--- Replace the whole with a string you'd like.
---
--- @see deleteLine
function replaceLine(what)
selectString(line, 1)
replace("")
insertText(what)
end
--- Default resizeEvent handler function. Overwrite this function to make a custom event handler
--- if the main window is being resized.
--- function handleWindowResizeEvent()
--- -- determine the size of your screen
--- WindowWidth=0;
--- WindowHeight=0;
--- WindowWidth, WindowHeight = getMainWindowSize();
--- -- move mini console "sys" to the far right side of the screen whenever the screen gets resized
--- moveWindow("sys",WindowWidth-300,0)
--- end
---
function handleWindowResizeEvent()
end
--- Sets current background color to a named color.
---
--- @usage Set background color to magenta.
---
--- bg("magenta")
---
--- bg("my miniconsole", "blue")
---
---
--- @see fg
--- @see showColors
function bg(console, colorName)
local colorName = colorName or console
if not color_table[colorName] then
error(string.format("bg: '%s' color doesn't exist - see showColors()", colorName))
end
if console == colorName or console == "main" then
setBgColor(color_table[colorName][1], color_table[colorName][2], color_table[colorName][3])
else
setBgColor(console, color_table[colorName][1], color_table[colorName][2], color_table[colorName][3])
end
end
--- Sets current foreground color to a named color.
---
--- @usage Set foreground color to black.
---
--- fg("black")
---
---
--- @see bg
--- @see showColors
function fg(console, colorName)
local colorName = colorName or console
if not color_table[colorName] then
error(string.format("fg: '%s' color doesn't exist - see showColors()", colorName))
end
if console == colorName or console == "main" then
setFgColor(color_table[colorName][1], color_table[colorName][2], color_table[colorName][3])
else
setFgColor(console, color_table[colorName][1], color_table[colorName][2], color_table[colorName][3])
end
end
--- Replaces the given wildcard (as a number) with the given text.
---
--- @usage Replace "goodbye" with "hello" on a trigger of "^You wave (goodbye)\.$"
--- --- replaceWildcard(2, "hello") ------ Is equivalent to doing: ---
--- selectString(matches[2], 1)
--- replace("hello")
---
function replaceWildcard(what, replacement)
if replacement == nil or what == nil then
return
end
selectCaptureGroup(what)
replace(replacement)
end
--- Prints out a formatted list of all available named colors, optional arg specifies number of columns to print in, defaults to 3
---
--- @usage Print list in 3 columns by default.
--- --- showColors() ------ @usage Print list in 2 columns. ---
--- showColors(2) ------ --- @see color_table function showColors(...) local args = {...} local n = #args local cols, search if n > 1 then cols, search = args[1], args[2] elseif n == 1 and type(args[1]) == "string" then search = args[1] elseif n == 1 and type(args[1]) == "number" then cols = args[1] elseif n == 0 then cols = 4 search = "" else error("showColors: Improper usage. Use showColors(columns, search)") end cols = cols or 4 search = search and search:lower() or "" local i = 1 for k,v in pairs(color_table) do if k:lower():find(search) then local fgc local red, green, blue -- local luminosity = (0.2126 * ((v[1]/255)^2.2)) + (0.7152 * ((v[2]/255)^2.2)) + (0.0722 * ((v[3]/255)^2.2)) -- The above formula was wrong, according to https://www.w3.org/TR/WCAG20/#relativeluminancedef -- it should be: if v[1] < 11 then red = v[1]/(255 * 12.92) else red = ((0.055 + v[1]/255)/1.055)^2.4 end if v[2] < 11 then green = v[2]/(255 * 12.92) else green = ((0.055 + v[2]/255)/1.055)^2.4 end if v[3] < 11 then blue = v[3]/(255 * 12.92) else blue = ((0.055 + v[3]/255)/1.055)^2.4 end local luminosity = (0.2126 * red) + (0.7152 * green) + (0.0722 * blue) if luminosity > 0.5 then fgc = "black" else fgc = "white" end fg(fgc) bg(k) echoLink(k..string.rep(" ", 23-k:len()),[[printCmdLine("]]..k..[[")]],v[1] ..", "..v[2]..", "..v[3],true) resetFormat() echo(" ") if i == cols then echo"\n" i = 1 else i = i + 1 end end end end --- TODO resizeGauge(gaugeName, width, height) function resizeGauge(gaugeName, width, height) assert(gaugesTable[gaugeName], "resizeGauge: no such gauge exists.") assert(width and height, "resizeGauge: need to have both width and height.") resizeWindow(gaugeName .. "_back", width, height) resizeWindow(gaugeName .. "_text", width, height) -- save new values in table gaugesTable[gaugeName].width, gaugesTable[gaugeName].height = width, height setGauge(gaugeName, gaugesTable[gaugeName].value, 1) end --- TODO setGaugeStyleSheet(gaugeName, css, cssback) function setGaugeStyleSheet(gaugeName, css, cssback, csstext) if not setLabelStyleSheet then return end -- mudlet 1.0.5 and lower compatibility assert(gaugesTable[gaugeName], "setGaugeStyleSheet: no such gauge exists.") setLabelStyleSheet(gaugeName .. "_back", cssback or css) setLabelStyleSheet(gaugeName .. "_front", css) setLabelStyleSheet(gaugeName .. "_text", csstext or "") end if rex then _Echos = { Patterns = { Hex = { [[(\x5c?\|c[0-9a-fA-F]{6}?(?:,[0-9a-fA-F]{6})?)|(\|r)]], rex.new[[\|c(?:([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2}))?(?:,([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2}))?]], }, Decimal = { [[(<[0-9,:]+>)|(
--- hecho("|cff0000,00ff00test")
---
---
--- @see xEcho
--- @see hinsertText
function hecho(...) xEcho("Hex", "echo", ...) end
--- Echo string with embedded decimal color information.
--- decho("<255,0,0:0,255,0>test")
---
---
--- @see xEcho
--- @see dinsertText
function decho(...) xEcho("Decimal", "echo", ...) end
--- Echo string with embedded color name information.
---
--- @usage Consider following example:
---
--- cecho("<green>green text <blue>blue text <red>red text")
---
---
--- @see xEcho
--- @see cinsertText
function cecho(...) xEcho("Color", "echo", ...) end
--- Inserts string with embedded hex color information.
---
--- @see xEcho
--- @see hecho
function hinsertText(...) xEcho("Hex", "insertText", ...) end
--- Inserts string with embedded decimal color information.
---
--- @see xEcho
--- @see decho
function dinsertText(...) xEcho("Decimal", "insertText", ...) end
--- Inserts string with embedded color name information.
---
--- @see xEcho
--- @see cecho
function cinsertText(...) xEcho("Color", "insertText", ...) end
--- Echos a link with embedded hex color information.
---
--- @usage hechoLink([window, ] string, command, hint)
---
--- @see xEcho
--- @see hecho
function hechoLink(...) xEcho("Hex", "echoLink", ...) end
--- Echos a link with embedded decimal color information.
---
--- @usage dechoLink([window, ] string, command, hint)
---
--- @see xEcho
--- @see decho
function dechoLink(...) xEcho("Decimal", "echoLink", ...) end
--- Echos a link with embedded color name information.
---
--- @usage cechoLink([window, ] string, command, hint)
---
--- @see xEcho
--- @see cecho
function cechoLink(...) xEcho("Color", "echoLink", ...) end
-- Backwards compatibility
checho = cecho
else
-- NOT LUADOC
-- See xEcho/another cecho for description.
function cecho(window, text)
local win = text and window
local s = text or window
if win == "main" then win = nil end
if win then
resetFormat(win)
else
resetFormat()
end
for color,text in string.gmatch("