50 lines
1.5 KiB
Lua
50 lines
1.5 KiB
Lua
-- getstyle.lua
|
|
--
|
|
|
|
--[[
|
|
|
|
See forum thread: http://www.gammon.com.au/forum/?id=7818
|
|
|
|
GetStyle:
|
|
Finds a style run corresponding to a given column
|
|
|
|
Returns nil if style run not found (eg. column out of range)
|
|
|
|
If style run found returns:
|
|
* the style table (see below)
|
|
* the character at that column
|
|
* the style run number (eg. style 3)
|
|
|
|
The style table should contain the following:
|
|
|
|
t.text --> text of that (entire) style run
|
|
t.length --> length of the (entire) style run
|
|
t.textcolour --> text colour (RGB number)
|
|
t.backcolour --> background colour (RGB number)
|
|
t.style --> style bits (1=bold, 2=underline, 4=italic)
|
|
|
|
--]]
|
|
|
|
function GetStyle (styleRuns, wantedColumn)
|
|
local currentColumn = 1
|
|
|
|
-- check arguments
|
|
assert (type (styleRuns) == "table",
|
|
"First argument to GetStyle must be table of style runs")
|
|
|
|
assert (type (wantedColumn) == "number" and wantedColumn >= 1,
|
|
"Second argument to GetStyle must be column number to find")
|
|
|
|
-- go through each style
|
|
for item, style in ipairs (styleRuns) do
|
|
local position = wantedColumn - currentColumn + 1 -- where letter is in style
|
|
currentColumn = currentColumn + style.length -- next style starts here
|
|
if currentColumn > wantedColumn then -- if we are within this style
|
|
return style, string.sub (style.text, position, position), item -- done
|
|
end -- if found column
|
|
end -- for each style
|
|
|
|
-- if not found: result is nil
|
|
|
|
end -- function GetStyle
|