Skip to content

Commit

Permalink
Give CSM access to use core.colorize() (#5113)
Browse files Browse the repository at this point in the history
  • Loading branch information
red-001 authored and nerzhul committed Mar 17, 2017
1 parent 7b74f04 commit d31750c
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 33 deletions.
32 changes: 32 additions & 0 deletions builtin/common/misc_helpers.lua
Expand Up @@ -638,3 +638,35 @@ if INIT == "client" or INIT == "mainmenu" then
return core.formspec_escape(fgettext_ne(text, ...))
end
end

-- Client-sided mods don't have access to getbool
if core.setting_getbool and core.setting_getbool("disable_escape_sequences") then

function core.get_color_escape_sequence(color)
return ""
end

function core.get_background_escape_sequence(color)
return ""
end

function core.colorize(color, message)
return message
end

else

local ESCAPE_CHAR = string.char(0x1b)
function core.get_color_escape_sequence(color)
return ESCAPE_CHAR .. "(c@" .. color .. ")"
end

function core.get_background_escape_sequence(color)
return ESCAPE_CHAR .. "(b@" .. color .. ")"
end

function core.colorize(color, message)
return core.get_color_escape_sequence(color) .. message .. core.get_color_escape_sequence("#ffffff")
end

end
31 changes: 0 additions & 31 deletions builtin/game/misc.lua
Expand Up @@ -170,37 +170,6 @@ function core.http_add_fetch(httpenv)
return httpenv
end

if minetest.setting_getbool("disable_escape_sequences") then

function core.get_color_escape_sequence(color)
return ""
end

function core.get_background_escape_sequence(color)
return ""
end

function core.colorize(color, message)
return message
end

else

local ESCAPE_CHAR = string.char(0x1b)
function core.get_color_escape_sequence(color)
return ESCAPE_CHAR .. "(c@" .. color .. ")"
end

function core.get_background_escape_sequence(color)
return ESCAPE_CHAR .. "(b@" .. color .. ")"
end

function core.colorize(color, message)
return core.get_color_escape_sequence(color) .. message .. core.get_color_escape_sequence("#ffffff")
end

end

function core.close_formspec(player_name, formname)
return minetest.show_formspec(player_name, formname, "")
end
6 changes: 6 additions & 0 deletions clientmods/preview/init.lua
Expand Up @@ -40,6 +40,12 @@ core.register_chatcommand("dump", {
end,
})

core.register_chatcommand("colorize_test", {
func = function(param)
return true, core.colorize("red", param)
end,
})

core.register_chatcommand("test_node", {
func = function(param)
core.display_chat_message(dump(core.get_node({x=0, y=0, z=0})))
Expand Down
38 changes: 36 additions & 2 deletions doc/client_lua_api.md
Expand Up @@ -787,12 +787,12 @@ Call these functions only at load time!
extra arguments and return the result
* `fgettext(string, ...)` : returns string
* same as fgettext_ne(), but calls core.formspec_escape before returning result
* `show_formspec(formname, formspec)` : returns true on success
* Shows a formspec to the player

### UI
* `minetest.ui.minimap`
* Reference to the minimap object. See `Minimap` class reference for methods.
* `show_formspec(formname, formspec)` : returns true on success
* Shows a formspec to the player

Class reference
---------------
Expand Down Expand Up @@ -837,3 +837,37 @@ Definition tables
func = function(name, param), -- Called when command is run.
-- Returns boolean success and text output.
}

Escape sequences
----------------
Most text can contain escape sequences, that can for example color the text.
There are a few exceptions: tab headers, dropdowns and vertical labels can't.
The following functions provide escape sequences:
* `core.get_color_escape_sequence(color)`:
* `color` is a ColorString
* The escape sequence sets the text color to `color`
* `core.colorize(color, message)`:
* Equivalent to:
`core.get_color_escape_sequence(color) ..
message ..
core.get_color_escape_sequence("#ffffff")`
* `color.get_background_escape_sequence(color)`
* `color` is a ColorString
* The escape sequence sets the background of the whole text element to
`color`. Only defined for item descriptions and tooltips.

`ColorString`
-------------
`#RGB` defines a color in hexadecimal format.

`#RGBA` defines a color in hexadecimal format and alpha channel.

`#RRGGBB` defines a color in hexadecimal format.

`#RRGGBBAA` defines a color in hexadecimal format and alpha channel.

Named colors are also supported and are equivalent to
[CSS Color Module Level 4](http://dev.w3.org/csswg/css-color/#named-colors).
To specify the value of the alpha channel, append `#AA` to the end of the color name
(e.g. `colorname#08`). For named colors the hexadecimal string representing the alpha
value must (always) be two hexadecima

0 comments on commit d31750c

Please sign in to comment.