请输入您要查询的百科知识:

 

词条 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条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/12 2:58:41