Module:Unicode data/derived core properties/make: Difference between revisions

Content deleted Content added
generate "default ignorable" data table
 
mNo edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1:
local p = {}
 
function p.showmain(frame)
local page = frame.args[1] or "User:Erutuon/Unicode/DerivedCoreProperties.txt"
local text = assert(mw.title.new(page):getContent())
local defaultIgnorabledefault_ignorable = text
:match("Derived Property: Default_Ignorable_Code_Point.-(%f[^\n]%x%x%x%x.-)%s*\n# Total code points")
local singles, ranges = {}, {}
for codePoint1code_point1, codePoint2code_point2 in defaultIgnorabledefault_ignorable:gmatch("%f[^\n%z](%x+)%.?%.?(%x*)") do
codePoint1code_point1, codePoint2code_point2 = tonumber(codePoint1code_point1, 16), tonumber(codePoint2code_point2, 16)
local lastRangelast_range = ranges[#ranges]
if lastRangelast_range and lastRangelast_range[2] == codePoint1code_point1 - 1 then
lastRangelast_range[2] = codePoint2code_point2 or codePoint1code_point1
elseif singles[code_point1 - 1] then
singles[code_point1 - 1] = nil
table.insert(ranges, { code_point1 - 1, code_point2 or code_point1 })
else
if not codePoint2code_point2 then
singles[codePoint1code_point1] = true
else
table.insert(ranges, { codePoint1code_point1, codePoint2code_point2 })
end
end
Line 24 ⟶ 27:
local data = {}
 
data.defaultIgnorabledefault_ignorable = {
singles = {
...
},
ranges = {
...
Line 38 ⟶ 40:
 
local Array = require "Module:array"
local printedRangesprinted_ranges = Array()
for _, range in ipairs(ranges) do
local low, high, script_code = unpack(range)
printedRangesprinted_ranges:insert(('\t\t{ 0x%05X, 0x%05X },'):format(low, high))
end
local printedSinglesprinted_singles = Array()
for codepoint in require 'Module:TableTools'.sortedPairs(singles) do
printedSinglesprinted_singles:insert(('\t\t[0x%05X] = true,'):format(codepoint))
end
local data = template
:gsub('%.%.%.', printedSinglesprinted_singles:concat('\n'), 1)
:gsub('%.%.%.', printedRangesprinted_ranges:concat('\n'), 1)
return mw.getCurrentFrame():extensionTag{