Modul:BaseConvert
Videz
Converts numbers to a specified base between 2 and 36, for use in templates such as {{binary}}, {{octal}}, {{hexadecimal}}, etc.
Example usage:
local BaseConvert = require('Modul:BaseConvert')
BaseConvert.convert({n = 14600926, base = 16}) -- returns 'DECADE'
Arguments:
- n - (required) the number to be converted, as a string. It may be a number instead, if the input base is 10.
- base - (required) the base to which the number should be converted. May be between 2 and 36, inclusive.
- from - the base of the input. Defaults to 10 (or 16 if the input has a leading '0x'). Note that bases other than 10 are not supported if the input has a fractional part.
- precision - number of digits to be rendered after the radix point. Trailing zeros will be added if needed. If not specified, however many digits are needed will be shown, up to 10.
- width - minimum number of digits to be rendered before the radix point. Leading zeros will be added if needed.
- default - Value to return if n is empty or non-numeric. Defaults to the value of n.
- prefix / suffix - wikitext to add before/after the returned result. Will not be added if n is empty or non-numeric. For example, you might use a prefix of
0x
when converting to hex, or a suffix of<sub>8</sub>
when converting to octal.
Zgornja dokumentacija je vključena iz Modul:BaseConvert/dok. (uredi | zgodovina) Urejevalci lahko preizkušate ta modul v peskovniku (ustvari | mirror) in testnihprimerih (ustvari). Prosimo, da dodate kategorije v /dok podstran. Podstrani te predloge. |
w = {};
convert = require( 'Module:BaseConvert' );
math_mod = require( 'Module:Math' );
function hex( value )
return convert.convert( { n = value, base = 16, width = 2, precision = 0 } );
end
function format_line( background, text_color )
return table.concat( {"background:#", background, ";color:#", text_color, ";font-size:85%;text-align:center;"} );
end
function range_pos( value, start, stop )
if start < stop then
if value < start then
return 0;
elseif value > stop then
return 1;
else
return (value - start) / (stop - start);
end
else
if value < stop then
return 1;
elseif value > start then
return 0;
else
return (start - value) / (start - stop);
end
end
end
function w.color_d( frame )
local val = math_mod._cleanNumber( frame, frame.args[1] );
return w._days_color( val );
end
function w.color_pastel( frame )
local val = math_mod._cleanNumber( frame, frame.args[1] );
return w._pastel_color( val );
end
function w.color_t( frame )
local val = math_mod._cleanNumber( frame, frame.args[1] );
return w._temperature_color( val );
end
function w.color_green( frame )
local val = math_mod._cleanNumber( frame, frame.args[1] );
return w._green_color( val );
end
function w.color_s( frame )
local val = math_mod._cleanNumber( frame, frame.args[1] );
return w._sunshine_color( val );
end
function w.color_h( frame )
local val = math_mod._cleanNumber( frame, frame.args[1] );
return w._humidity_color( val );
end
function w.color_p( frame )
local val = math_mod._cleanNumber( frame, frame.args[1] );
return w._precipitation_color( val );
end
function w._days_color( val )
local item, background, text_color;
if val == nil then
return format_line( "FFFFFF", "000000" );
end
item = hex( range_pos( val, 20, 0 )*255 );
background = item .. item;
item = hex( range_pos( val, 40, 20 )*255 );
background = background .. item;
if val >= 12 then
text_color = "FFFFFF";
else
text_color = "000000";
end
return format_line( background, text_color );
end
function w._green_color( val )
local item1, item2, background, text_color;
if val == nil then
return format_line( "FFFFFF", "000000" );
end
item1 = hex( range_pos( val, 165.6, 0 )*255 );
item2 = hex( range_pos( val, 300, 165.61 )*207 + 48 );
background = table.concat( { item1, item2, item1 } );
if val >= 200 then
text_color = "FFFFFF";
else
text_color = "000000";
end
return format_line( background, text_color );
end
function w._temperature_color( val )
local item, background, text_color;
if val == nil then
return format_line( "FFFFFF", "000000" );
end
if val < 4.5 then
item = range_pos( val, -42.75, 4.5 )*255;
background = hex( item );
else
item = range_pos( val, 60, 41.5 )*255;
background = hex( item );
end
if val <= 4.5 then
item = range_pos( val, -42.75, 4.5 )*255;
background = background .. hex( item );
else
item = range_pos( val, 41.5, 4.5 )*255;
background = background .. hex( item );
end
if val < -42.78 then
item = range_pos( val, -90, -42.78 )*255;
background = background .. hex( item );
else
item = range_pos( val, 23, 4.5 )*255;
background = background .. hex( item );
end
if val < -23.3 or val >= 37.8 then
text_color = "FFFFFF";
else
text_color = "000000";
end
return format_line( background, text_color );
end
function w._precipitation_color( val )
local item, background, text_color;
if val == nil then
return format_line( "FFFFFF", "000000" );
end
item = hex( range_pos( val, 165.6, 0 )*255 );
background = item .. item;
item = hex( range_pos( val, 300, 165.61 )*207 + 48 );
background = background .. item;
if val > 90 then
text_color = "FFFFFF";
else
text_color = "000000";
end
return format_line( background, text_color );
end
function w._humidity_color( val )
local item, background, text_color;
if val == nil then
return format_line( "FFFFFF", "000000" );
end
item = hex( range_pos( val, 66.67, 0 )*255 );
background = item .. item;
item = hex( range_pos( val, 133.33, 66.667 )*255 );
background = background .. item;
if val >= 40 then
text_color = "FFFFFF";
else
text_color = "000000";
end
return format_line( background, text_color );
end
function w._sunshine_color( val )
local item, background, text_color;
if val == nil then
return format_line( "FFFFFF", "000000" );
end
if val < 90 then
item = hex( range_pos( val, 0, 90 )*170 );
elseif val < 180 then
item = hex( range_pos( val, 90, 180 )*42.5 + 170 );
else
item = hex( range_pos( val, 180, 360 )*42.5 + 212.5 );
end
background = item .. item;
if val < 90 then
item = hex( range_pos( val, 0, 90 )*170 );
elseif val < 270 then
item = hex( range_pos( val, 150, 90 )*170 );
else
item = hex( range_pos( val, 270, 720 )*255 );
end
background = background .. item;
if val < 80 then
text_color = "FFFFFF";
else
text_color = "000000";
end
return format_line( background, text_color );
end
function w._pastel_color( val )
local item, background, text_color;
if val == nil then
return format_line( "FFFFFF", "000000" );
end
if val < -15 or val >= 39 then
text_color = "FFFFFF";
else
text_color = "000000";
end
if val >= 51 then
background = 'EE2200';
else
val = math_mod._round( (val + 25.5)/3, 0 );
if val == 1 then
background = 'BB00CC';
elseif val == 2 then
background = 'CC00EE';
elseif val == 3 then
background = 'CC33EE';
elseif val == 4 then
background = 'CC55EE';
elseif val == 5 then
background = 'DD66EE';
elseif val == 6 then
background = 'DD77EE';
elseif val == 7 then
background = 'DD99EE';
elseif val == 8 then
background = 'DDAAEE';
elseif val == 9 then
background = 'DDBBEE';
elseif val == 10 then
background = 'EECCFF';
elseif val == 11 then
background = 'FFDDFF';
elseif val == 12 then
background = 'F1F1F1';
elseif val == 13 then
background = 'FFEEBB';
elseif val == 14 then
background = 'FFFFCC';
elseif val == 15 then
background = 'FFFFBB';
elseif val == 16 then
background = 'FFFFAA';
elseif val == 17 then
background = 'FFFF88';
elseif val == 18 then
background = 'FFCC33';
elseif val == 19 then
background = 'FFBB33';
elseif val == 20 then
background = 'FF9900';
elseif val == 21 then
background = 'FF8844';
elseif val == 22 then
background = 'FF6633';
elseif val == 23 then
background = 'FF5522';
elseif val == 24 then
background = 'FF4422';
elseif val == 25 then
background = 'EE4400';
else
background = 'AA00AA'
end
end
return format_line( background, text_color );
end
function w._none_color( val )
return format_line( "FAFAFA", "000000" );
end
function w.interpret_color_code( code )
code = code:lower();
if code == 't' then
return w._temperature_color;
elseif code == 'pastel' then
return w._pastel_color;
elseif code == 'green' then
return w._green_color;
elseif code == 'h' then
return w._humidity_color;
elseif code == 's' then
return w._sunshine_color;
elseif code == 'p' then
return w._precipitation_color;
elseif code == 'd' then
return w._days_color;
elseif code == 'none' then
return w._none_color;
else
error( 'Unknown color scheme option' );
end
end
return w;