词条 | Module:Language/scripts/codepoints/make |
释义 | local p = {} local sortedPairs = require("Module:TableTools").sortedPairs local function highlight(content) return mw.getCurrentFrame():extensionTag{ name = "syntaxhighlight", content = content, args = { lang = "lua" } } end local function dump(data) local output = setmetatable({}, { __index = table }) output:insert [[ {individual = { ]]
for codePoint, scriptCode in sortedPairs(data.individual) do output:insert(([[ [0x%05X] = "%s", ]]):format(codePoint, scriptCode)) end output:insert [[ }, ranges = { ]] for _, range in ipairs(data.ranges) do output:insert(([[ { 0x%05X, 0x%05X, "%s" }, ]]):format(unpack(range))) end output:insert([[ }, }]])
return output:concat() end function p.parseUnicodeScripts(frame) local content = mw.title.new("Module:Language/scripts/codepoints/make/doc"):getContent() local _, j, scriptData = content:find("") local scriptCodeData = content:match("", j + 1)
local scriptNameToCode = {} for code, name in scriptCodeData:gmatch("%f[^\]sc +; +(%a+) +; +([%a_]+)") do scriptNameToCode[name] = code end
local ranges, individual = {}, {} local script_data = { ranges = ranges, individual = individual } local i = 0 -- current index in ranges local prevScriptCode, prevCodepoint for codepoint1, codepoint2, scriptName in scriptData:gmatch("%f[^\](%x+)%.?%.?(%x*) +; +([%a_]+)") do codepoint1, codepoint2 = tonumber(codepoint1, 16), tonumber(codepoint2, 16) scriptCode = scriptNameToCode[scriptName] or scriptName .. "(???)"
if scriptCode == prevScriptCode and prevCodepoint and codepoint1 == prevCodepoint + 1 then if individual[prevCodepoint] then individual[prevCodepoint] = nil i = i + 1 ranges[i] = { prevCodepoint, codepoint2 or codepoint1, scriptCode } else ranges[i][2] = codepoint2 or codepoint1 end elseif codepoint2 then i = i + 1 ranges[i] = { codepoint1, codepoint2, scriptCode } else individual[codepoint1] = scriptCode end prevCodepoint = codepoint2 or codepoint1 prevScriptCode = scriptCode end
table.sort( ranges, function(range_table1, range_table2) return range_table1[1] < range_table2[1] end)
return highlight(dump(script_data)) end return p |
随便看 |
开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。