Module:Sandbox/Erutuon: Difference between revisions

Content deleted Content added
print out variant subtags with each of their prefixes, from Module:Language/data/iana variants
function to print data module for "default ignorable" property
 
(9 intermediate revisions by 2 users not shown)
Line 1:
local p = {}
 
function p.show(frame)
local page = frame.args[1] or "User:Erutuon/Unicode/DerivedCoreProperties.txt"
local text = assert(mw.title.new(page):getContent())
local defaultIgnorable = text
:match("Derived Property: Default_Ignorable_Code_Point.-(%f[^\n]%x%x%x%x.-)%s*\n# Total code points")
local singles, ranges = {}, {}
for codePoint1, codePoint2 in defaultIgnorable:gmatch("%f[^\n%z](%x+)%.?%.?(%x*)") do
codePoint1, codePoint2 = tonumber(codePoint1, 16), tonumber(codePoint2, 16)
local lastRange = ranges[#ranges]
if lastRange and lastRange[2] == codePoint1 - 1 then
lastRange[2] = codePoint2 or codePoint1
else
if not codePoint2 then
singles[codePoint1] = true
else
table.insert(ranges, { codePoint1, codePoint2 })
end
end
end
local template = [[
local data = {}
 
data.defaultIgnorable = {
singles = {
...
},
ranges = {
...
},
}
 
return data
]]
 
local Array = require "Module:array"
local printedRanges = Array()
for _, range in ipairs(ranges) do
local low, high, script_code = unpack(range)
printedRanges:insert(('\t\t{ 0x%05X, 0x%05X },'):format(low, high))
end
local printedSingles = Array()
for codepoint in require 'Module:TableTools'.sortedPairs(singles) do
printedSingles:insert(('\t\t[0x%05X] = true,'):format(codepoint))
end
local data = template
:gsub('%.%.%.', printedSingles:concat('\n'), 1)
:gsub('%.%.%.', printedRanges:concat('\n'), 1)
return data
end
 
local Unicode_data = require "Module:Unicode data/sandbox"
local fun = require "Module:fun"
local m_table = require "Module:TableTableTools"
 
local function errorf(level, ...)
if type(level) == "number" then
return error(string.format(...), level + 1)
else -- level is actually the format string.
Line 368 ⟶ 423:
end
 
function p.show_COinS(frame)
local output_mt = {}
local ref = frame.args[1]
function output_mt:insert(str)
self.n = self.n + 1
local tag = ref:match('<span [^>]*class="Z3988"[^>]*>')
self[self.n] = str
local data = tag:match('title="(.-)"')
end
 
local vals = {}
-- also in [[Module:Unicode data/documentation functions]]
function output_mt:insert_format(...)
for item in mw.text.gsplit(data, "&") do
self:insert(string.format(...))
local key, value = item:match("(.-)=(.*)")
end
vals[key] = mw.uri.decode(value)
 
output_mt.join = table.concat
 
output_mt.__index = output_mt
 
local function Output()
return setmetatable({ n = 0 }, output_mt)
end
 
function p.show(frame)
local output = Output()
for variant, data in pairs(mw.loadData "Module:Language/data/iana variants") do
if data.prefixes[1] then
local tags = Output()
for _, prefix in ipairs(data.prefixes) do
tags:insert(prefix .. "-" .. variant)
end
output:insert(tags:join(", "))
end
end
return output:join(ref .. "<br>\n\n") .. table.concat(
require "Module:fun".mapIter(
function (value, key)
return ("%s: %s"):format(key, value)
end,
m_table.sortedPairs(
vals)),
", ")
end