Module:Sandbox/Erutuon/charinsert names

local p = {}

local function get_all_codepoints(str)

local codepoint_set = {}

for codepoint in mw.ustring.gcodepoint(str) do

codepoint_set[codepoint] = true

end

return require "Module:TableTools".keysToList(codepoint_set)

end

function p.JSON_character_names(str)

local codepoint_list = get_all_codepoints(str)

local Unicode = require "Module:Unicode data"

local JSON = {}

local len = 0

for i, codepoint in ipairs(codepoint_list) do

local key_and_value = '"' .. codepoint .. '":"' .. Unicode.lookup_name(codepoint) .. '"'

local added_len = #key_and_value + 1 -- for comma

if len + added_len > 79 then

key_and_value = '\n' .. key_and_value

len = 0

end

len = len + added_len

table.insert(JSON, key_and_value)

end

return "{" .. table.concat(JSON, ",") .. "}"

end

-- copied from wikt:Module:debug

function p.highlight(content, options)

if type(content) == "table" then

options = content

options = {

lang = options.lang or "lua",

inline = options.inline and true

}

return function(content)

return mw.getCurrentFrame():extensionTag{

name = "syntaxhighlight",

content = content,

args = options

}

end

else

return mw.getCurrentFrame():extensionTag{

name = "syntaxhighlight",

content = content,

args = {

lang = options and options.lang or "lua",

inline = options and options.inline and true or nil

}

}

end

end

-- Usage:

-- {{#invoke:Sandbox/Erutuon/charinsert_names|highlighted_character_names|abc}}

-- ↓

-- {"97":"LATIN SMALL LETTER A","98":"LATIN SMALL LETTER B",

-- "99":"LATIN SMALL LETTER C"}

function p.highlighted_character_names(frame)

local chars = frame.args[1]

if not chars or chars == "" then

error("Supply characters in parameter 1")

end

return p.highlight(p.JSON_character_names(chars))

end

function p.charinsert_char_names()

local content = mw.title.new("MediaWiki:Gadget-charinsert-core.js"):getContent()

local charinsert = content:match("charinsert: (%b{})")

if not charinsert then return "Could not find charinsert" end

return p.highlight(p.JSON_character_names(charinsert))

end

return p