မဝ်ဂျူ:Hani-sortkey/data
မံက်ပြာကတ်
Documentation for this module may be created at မဝ်ဂျူ:Hani-sortkey/data/doc
local export = {}
local function getBlock(char)
if type(char) ~= "number" then
char = mw.ustring.codepoint(char)
end
-- Don't return a block not currently serviced by [[Module:Hani-sortkey]] (or an unassigned one).
if (0x3400 <= char and char <= 0x9FFF) or (0x20000 <= char and char <= 0x2EBEF) or (0x30000 <= char and char <= 0x323AF) then
return require("Module:Unicode data").lookup_block(char)
else
return nil
end
end
-- A sortkey module applies to the code points of at most two blocks.
local function getBlocks(moduleNumber, start, moduleStart)
local firstChar = ( moduleNumber - moduleStart ) * 500 + start
local lastChar = firstChar + 500 - 1
local blocks = {}
table.insert( blocks, getBlock(firstChar) )
table.insert( blocks, getBlock(lastChar) )
-- mw.log(firstChar, lastChar, blocks[1], blocks[2])
return blocks
end
local function getCodePoints(title)
local moduleTitle = title.fullText:match(".+%d+")
local moduleContent = moduleTitle
and mw.title.new(moduleTitle):getContent()
if moduleContent then
return tonumber(moduleContent:match("%[(%d+)%]")),
tonumber(moduleContent:match(".+%[(%d+)%]"))
end
end
function export.getDescription(frame)
local title = mw.title.getCurrentTitle()
local namespace = title.nsText
local pagename = title.text
local subpage = title.subpageText
local moduleNumber = pagename:match("^Hani%-sortkey/data/(%d+)")
if moduleNumber then
moduleNumber = tonumber(moduleNumber)
else
require("Module:debug").track("Hani-sortkey/failed")
return nil
end
local blocks
if moduleNumber <= 56 then
blocks = getBlocks(moduleNumber, 0x3400, 1)
elseif moduleNumber <= 177 then
blocks = getBlocks(moduleNumber, 0x20000, 57)
elseif moduleNumber <= 196 then
blocks = getBlocks(moduleNumber, 0x30000, 178)
else
require("Module:debug").track("Hani-sortkey/failed")
return nil
end
local function link(block_name)
return "[[w:" .. block_name .. "|" .. block_name .. "]] block "
.. "([[:Category:" .. block_name .. " block|category]])"
.. (subpage ~= "documentation" and "[[Category:" .. block_name .. " block| ]]"
or "")
end
local out = {}
-- Link any unique blocks that were found.
for i = 1, 2 do
if blocks[i] then
-- Don't insert the same block twice.
if not blocks[blocks[i]] then
table.insert( out, link(blocks[i]) )
end
blocks[blocks[i]] = true
end
end
if #out > 0 then
out = table.concat(out, " and ")
else
require("Module:debug").track("Hani-sortkey/failed")
return nil
end
local firstCodePoint, lastCodePoint = getCodePoints(title)
local codePointText
if firstCodePoint and lastCodePoint then
codePointText = ("(code points U+%04X–U+%04X) "):format(firstCodePoint, lastCodePoint)
else
codePointText = ""
end
return " These are sortkeys for Chinese characters " .. codePointText
.. "from " .. out .. ", indexed by Unicode code point (in decimal base)."
end
return export