Module:CharSwatch
Jump to navigation
Jump to search
Documentation for this module may be created at Module:CharSwatch/doc
local p = {}
function p.swatch(frame)
local char = tonumber(frame.args[1])
return string.format(
"[[char|#char]] %d %s (0x%02X)",
char, tostring(html_swatch(char)), char
)
end
function html_swatch(i)
-- Trick: use outer span to get the char to align with pixel grid.
-- I think this is necessary because preceding text may not be monospaced
-- or an exact pixel width, so the char gets pushed horizontally by a
-- fraction of a pixel. Using an outer span fixes it in Chromium/Firefox.
local outer = mw.html.create("span")
outer:css({
display = "inline-flex",
["justify-content"] = "center",
["min-width"] = "11px"
})
local inner = outer:tag("span")
inner:css({
["background-color"] = "#555",
["box-shadow"] = "0 0 1px #808080",
color = "#fff",
display = "inline-block",
font = "14px EGA8",
height = "1em",
["line-height"] = "100%",
["min-height"] = "14px",
["min-width"] = "8px",
padding = "1px",
["vertical-align"] = "middle"
})
inner:wikitext(char_to_unicode(i))
return outer
end
local unicode_table = {
[0] = " ", -- should be null, display as space
[1] = "☺",
[2] = "☻",
[3] = "♥",
[4] = "♦",
[5] = "♣",
[6] = "♠",
[7] = "•",
[8] = "◘",
[9] = "○",
[10] = "◙",
[11] = "♂",
[12] = "♀",
[13] = "♪",
[14] = "♫",
[15] = "☼",
[16] = "►",
[17] = "◄",
[18] = "↕",
[19] = "‼",
[20] = "¶",
[21] = "§",
[22] = "▬",
[23] = "↨",
[24] = "↑",
[25] = "↓",
[26] = "→",
[27] = "←",
[28] = "∟",
[29] = "↔",
[30] = "▲",
[31] = "▼",
[127] = "⌂",
[128] = "Ç",
[129] = "ü",
[130] = "é",
[131] = "â",
[132] = "ä",
[133] = "à",
[134] = "å",
[135] = "ç",
[136] = "ê",
[137] = "ë",
[138] = "è",
[139] = "ï",
[140] = "î",
[141] = "ì",
[142] = "Ä",
[143] = "Å",
[144] = "É",
[145] = "æ",
[146] = "Æ",
[147] = "ô",
[148] = "ö",
[149] = "ò",
[150] = "û",
[151] = "ù",
[152] = "ÿ",
[153] = "Ö",
[154] = "Ü",
[155] = "¢",
[156] = "£",
[157] = "¥",
[158] = "₧",
[159] = "ƒ",
[160] = "á",
[161] = "í",
[162] = "ó",
[163] = "ú",
[164] = "ñ",
[165] = "Ñ",
[166] = "ª",
[167] = "º",
[168] = "¿",
[169] = "⌐",
[170] = "¬",
[171] = "½",
[172] = "¼",
[173] = "¡",
[174] = "«",
[175] = "»",
[176] = "░",
[177] = "▒",
[178] = "▓",
[179] = "│",
[180] = "┤",
[181] = "╡",
[182] = "╢",
[183] = "╖",
[184] = "╕",
[185] = "╣",
[186] = "║",
[187] = "╗",
[188] = "╝",
[189] = "╜",
[190] = "╛",
[191] = "┐",
[192] = "└",
[193] = "┴",
[194] = "┬",
[195] = "├",
[196] = "─",
[197] = "┼",
[198] = "╞",
[199] = "╟",
[200] = "╚",
[201] = "╔",
[202] = "╩",
[203] = "╦",
[204] = "╠",
[205] = "═",
[206] = "╬",
[207] = "╧",
[208] = "╨",
[209] = "╤",
[210] = "╥",
[211] = "╙",
[212] = "╘",
[213] = "╒",
[214] = "╓",
[215] = "╫",
[216] = "╪",
[217] = "┘",
[218] = "┌",
[219] = "█",
[220] = "▄",
[221] = "▌",
[222] = "▐",
[223] = "▀",
[224] = "ɑ",
[225] = "ϐ",
[226] = "ᴦ",
[227] = "ᴨ",
[228] = "∑",
[229] = "ơ",
[230] = "µ",
[231] = "ᴛ",
[232] = "ɸ",
[233] = "ϴ",
[234] = "Ω",
[235] = "ẟ",
[236] = "∞",
[237] = "∅",
[238] = "∈",
[239] = "∩",
[240] = "≡",
[241] = "±",
[242] = "≥",
[243] = "≤",
[244] = "⌠",
[245] = "⌡",
[246] = "÷",
[247] = "≈",
[248] = "°",
[249] = "∙",
[250] = "·",
[251] = "√",
[252] = "ⁿ",
[253] = "²",
[254] = "■",
[255] = " "
}
function char_to_unicode(i)
if i < 0 or i > 255 then
error("char index out of range: " .. i)
end
if i >= 32 and i <= 126 then
-- Handle regular ASCII characters
return string.char(i)
end
return unicode_table[i]
end
return p