Module:ChartColors

require('strict')

local p = {}

local ARG = require "Module:Arguments"

local CFCM = require "Module:ComplForColorModules"

local TNTT = require "Module:TNTTools"

--local SD = require "Module:SimpleDebug"

local I18n = 'ChartColors'

local function I18nStr (S, ...)

return TNTT.GetMsgP (I18n, S, {...})

end

--local RS_ColorNameInvalid = 'El nom del color (%s) no és vàlid (ha de ser Categ20 o Plotter)'

--local RS_ColorNumInvalid = 'El nombre de colors hauria d’estar entre 1 i %d (ara és %d)'

--local RS_StartNumInvalid = 'El número del primer color hauria d’estar entre 1 i %d (ara és %d)'

local category20 = {

'#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a', '#d62728', '#ff9896', '#9467bd', '#c5b0d5',

'#8c564b', '#c49c94', '#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d', '#17becf', '#9edae5',

}

local plotter = {--from Module:Plotter/DefaultColors

'red', 'blue', 'green', 'yellow', 'fuchsia', 'aqua', 'brown', 'orange', 'purple', 'sienna',

'#F0A3FF', '#191919', '#005C31', 'honeydew', '#808080', 'khaki', 'lime', 'navy', 'pink', '#426600',

'#5EF1F2', 'turquoise', '#E0FF66', 'violet', '#FFFF80', '#FF5005',

}

function p.GetColors (ColorName, IsInv, StartN, N, CallError)

local SelColors = {}

local ColorNameL = string.lower(ColorName)

local Palet0 = {}

if ColorNameL == 'categ20' then

Palet0 = category20

elseif ColorNameL == 'plotter' then

Palet0 = plotter

elseif CallError then

error (I18nStr ('ColorNameInvalid',ColorName))

end

local MaxN = table.getn(Palet0)

if (N < 0) or (N > MaxN) then

error (I18nStr ('ColorNumInvalid',tostring(MaxN),tostring(N)))

else

local Palet = {}

if IsInv then

for i=MaxN, 1, -1 do

table.insert(Palet, Palet0[i])

end

else

Palet = Palet0

end

if StartN > MaxN then

error (I18nStr ('StartNumInvalid',tostring(MaxN),tostring(StartN)))

end

local Step = 1

local NEnd = N

if (ColorNameL == 'categ20') and (N<=10) then

Step = 2

if StartN == 1 then

NEnd = N*2

end

end

if StartN == 1 then

for i=1, NEnd, Step do

table.insert(SelColors, Palet[i])

end

else

local Count = 0

for i=StartN, MaxN, Step do

table.insert(SelColors, Palet[i])

Count = Count + 1

if Count == NEnd then

break

end

end

if Count < NEnd then

for i=1, MaxN, Step do

table.insert(SelColors, Palet[i])

Count = Count + 1

if Count == NEnd then

break

end

end

end

end

return SelColors

end

end --GetColors

function p.ColorNameInvStartFromS (S)

local StartN = 1

local ParamsA = {}

local ColorName, IsInv

ColorName, IsInv, ParamsA = CFCM.ColorNameInvFromS0 (S)

local PN = table.getn(ParamsA)

if PN > 1 then

if ParamsA[2]=='i' then

IsInv = true

else

StartN = tonumber (ParamsA[2])

end

if PN == 3 then

StartN = tonumber (ParamsA[3])

end

end

return ColorName, IsInv, StartN

end --ColorNameInvStartFromS

local function ColorNameInv (args)

local S = args[1] or ''

local ColorName, IsInv, ParamsA = CFCM.ColorNameInvFromS0 (S)

local StartN = 1

ColorName, IsInv, StartN = p.ColorNameInvStartFromS (S)

return ColorName, IsInv, StartN

end --ColorNameInv

function p.ShowColors(frame)

local args = ARG.getArgs(frame,{

removeBlanks = false

});

local ColorName, IsInv, StartN = ColorNameInv (args)

local N = tonumber(args[2])

local WriteColor = args[3] or ""

local ColorFound = {}

ColorFound = p.GetColors (ColorName, IsInv, StartN, N, true)

local boxes = {}

for i=1, table.getn(ColorFound) do

table.insert(boxes, CFCM.Box(ColorFound[i],WriteColor))

end

return table.concat(boxes, " ")

end --ShowColors

function p.Legends(frame)

local args = ARG.getArgs(frame,{

removeBlanks = false

})

local Nargs = require("Module:TableTools").length(args)

local ColorName, IsInv, StartN = ColorNameInv (args)

local N = tonumber(args[2])

local ColWidth = args[3]

local ColorFound = {}

local Labels = {}

local NLabels = 0

local OutlineColor

local IsTemplate = true

ColorFound = p.GetColors (ColorName, IsInv, StartN, N, true)

Labels, NLabels, OutlineColor = CFCM.GetLabels (args, N, 4)

return CFCM.LegendText (ColorFound, Labels, NLabels, ColWidth, IsTemplate, OutlineColor)

end

return p