local p = {}
local getArgs = require('Module:Arguments').getArgs
local unicodeLookupName = require('Module:Unicode data').lookup_name
--local frame
local function isReserved(hex)
return unicodeLookupName(tonumber(hex, 16)):find("<reserved")
end
local function createTableBody(body, startHex, endHex)
--local body = mw.html.create("tbody")
--header
local labelRow = body:tag("tr")
labelRow:tag("th")--empty corner cell
for colIndex=0, 15 do
labelRow:tag("th")
:css("width", "20pt")
:wikitext(string.format("%X", colIndex))
end
--fill cells
local startInt = tonumber(startHex:sub(1, -2), 16)
local endInt = tonumber(endHex:sub(1, -2), 16)
for rowIndex=startInt, endInt do
local row = body:tag("tr")
local rowHex = string.format("%X", rowIndex)
row:tag("th"):wikitext('U+'.. rowHex .. 'x')
for colIndex=0, 15 do
local hexStr = rowHex .. string.format("%X", colIndex)
local cell = row:tag("td")
:attr("title", unicodeLookupName(tonumber(hexStr, 16)))
if isReserved(hexStr) then
cell:addClass("reserved")
else
cell:wikitext('&#x'.. hexStr .. ';')
end
end
end
--return tostring(body)
end
local function createTableHeader(head, name, url)
local name = "'''[[" .. name .. "]]'''"
local pdfLink = "[" .. url .. " Official Unicode Consortium code chart] (PDF)"
head:tag("th")
:attr("colspan", "100%")
:wikitext(name .. "<br />" .. pdfLink)
end
local function createTableFooter(foot, latest)
local th = foot:tag("th")
:attr("colspan", "100%")
:wikitext("'''Notes'''")
local list = th:tag("ol")
list:tag("li"):wikitext("{{note|U0370_as_of_Unicode_version}}{{Unicode version|prefix=Asof|version=15.1}}")
list:tag("li"):wikitext("{{note|U0370_grey}}Grey areas indicate non-assigned code points")
end
local function createTable(name, url, blockRangeStart, blockRangeEnd, latestChange)
local tableHTML = mw.html.create("table")
:addClass("wikitable")
:addClass("unicode-block")
if name and url then
local head = tableHTML:tag("thead")
createTableHeader(head, name, url)
end
if blockRangeStart and blockRangeEnd then
local body = tableHTML:tag("tbody")
createTableBody(body, blockRangeStart, blockRangeEnd)
end
if latestChange then
local foot = tableHTML:tag("tfoot")
createTableFooter(foot, latestChange)
end
return tostring(tableHTML)
end
function p.main(frame)--Arg)
--frame = frameArg
local args = getArgs(frame)
if args['rangestart'] and args['rangeend'] then
return tostring(
createTable(args['blockname'],
args['url'],
args['rangestart'],
args['rangeend'],
args['latest change'])
)
end
end
return p