Module:Unicode data/category/make
MyWikiBiz, Author Your Legacy — Friday November 15, 2024
Jump to navigationJump to searchLua error at line 11: attempt to index local 'text' (a nil value).
local p = {} local function read_page(title) return mw.title.new(title):getContent() end function p.make_singles_and_ranges(derived_general_category_page, property_value_aliases_page) local text = read_page(derived_general_category_page) local singles, ranges = {}, {} for code_point1, code_point2, general_category in text:gmatch "%f[^\n%z](%x+)%.?%.?(%x*)%s*;%s*(%u%l)" do if general_category ~= "Cn" then code_point1 = tonumber(code_point1, 16) -- XXXX..XXXX ; gc if code_point2 ~= "" then code_point2 = tonumber(code_point2, 16) table.insert(ranges, { code_point1, code_point2, general_category }) -- XXXX ; gc else singles[code_point1] = general_category end end end local property_value_aliases = read_page(property_value_aliases_page) local general_category_aliases = property_value_aliases:match "# General_Category[^\n]+%s*(.-)%s*%f[^\n]#" local long_names = {} for abbr, long_name in general_category_aliases:gmatch "gc%s*;%s*(%S+)%s*;%s*([%a_]+)" do long_names[abbr] = long_name end return singles, ranges, long_names end function p.print_data(data) local output = require "Module:array"() local function writef(...) output:insert(string.format(...)) end writef [[ return { singles = { ]] -- Check that maximum "singles" codepoint is less than 0x100000? for codepoint, category in require "Module:TableTools".sortedPairs(data.singles) do writef('\t\t[0x%05X] = "%s",\n', codepoint, category) end writef [[ }, ranges = { ]] local function compare_ranges(range1, range2) return range1[1] < range2[1] end table.sort(data.ranges, compare_ranges) for _, range in ipairs(data.ranges) do writef('\t\t{ 0x%06X, 0x%06X, "%s" },\n', unpack(range)) end writef [[ }, long_names = { ]] for abbr, long_name in require "Module:TableTools".sortedPairs(data.long_names) do writef('\t\t%-2s = "%s",\n', abbr, long_name) end writef [[ }, }]] return output:concat() end function p.main(frame) local data = {} data.singles, data.ranges, data.long_names = p.make_singles_and_ranges( "User:Erutuon/Unicode/DerivedGeneralCategory.txt", "User:Erutuon/Unicode/PropertyValueAliases.txt") return frame:extensionTag{ name = "syntaxhighlight", content = p.print_data(data), args = { lang = "lua" } } end return p