Module:CharSwatch: Difference between revisions

From Wiki of ZZT
Jump to navigation Jump to search
(Fix pixel alignment issue, tweak padding again)
(Reverting fix for blurry characters, as it doesn't actually fix anything :-()
Tag: Undo
Line 10: Line 10:


function html_swatch(i)
function html_swatch(i)
-- Trick: use outer span to get the char to align with pixel grid.
local span = mw.html.create("span")
-- I think this is necessary because preceding text may not be monospaced
span:css({
-- 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",
["background-color"] = "#555",
["box-shadow"] = "0 0 1px #808080",
["box-shadow"] = "0 0 1px #808080",
Line 31: Line 21:
["min-height"] = "14px",
["min-height"] = "14px",
["min-width"] = "8px",
["min-width"] = "8px",
padding = "1px",
padding = "2px",
["vertical-align"] = "middle"
["vertical-align"] = "middle"
})
})
inner:wikitext(char_to_unicode(i))
span:wikitext(char_to_unicode(i))
return outer
return span
end
end



Revision as of 06:05, 17 January 2021

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)
	local span = mw.html.create("span")
	span: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 = "2px",
		["vertical-align"] = "middle"
	})
	span:wikitext(char_to_unicode(i))
	return span
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