Here naverokê

Modul:ziman/print

Ji Wîkîferheng
Belgekirina modulê[nîşan bide] [biguhêre] [rojane bike]
Ev belge ji Modul:ziman/print/belge hatiye girtin.

Ji bo rojanekirina Modul:ziman/ji kod li nav vê kodê veşartî bi kar bîne:

Ji bo rojanekirina Modul:ziman/navên zimanan vê kodê veşartî bi kar bîne:

local export = {}

local concat = table.concat
local highlight = require("Module:debug").highlight
local insert = table.insert
local sort = table.sort
local sorted_pairs = require("Module:table").sortedPairs
local toJSON = require("Module:JSON").toJSON
local yesno = require("Module:yesno")

local function for_code_and_data(func, module_type)
	function iterate(module)
		for code, data in pairs(require(module)) do
			func(code, data)
		end
	end
	
	if module_type == "language" then
		iterate("Module:languages/data/2")
	
		local char = string.char
			for b = ("a"):byte(), ("z"):byte() do
				iterate("Module:languages/data/3/" .. char(b))
			end

		iterate("Module:languages/data/exceptional")
	elseif module_type == "etymology" then
		iterate("Module:etymology languages/data")
	elseif module_type == "family" then
		iterate("Module:families/data")
	end
end

local function generate_table(name_to_code, module_type)
	local result = {}
	
	if name_to_code then
		for_code_and_data(function(code, data) result[data[1]] = code end, module_type)
	else
		for_code_and_data(function(code, data) result[code] = data[1] end, module_type)
	end
	
	return result
end

local function dump(data)
	local output, i = {"return {"}, 1
	
	for k, v in sorted_pairs(data) do
		i = i + 1
		output[i] = ('\t[%q] = %q,'):format(k, v)
	end
	
	insert(output, "}")
	
	return concat(output, "\n")
end

local function print_data(name_to_code, args)
	local t = generate_table(name_to_code, args[2])
	if args[1] == "plain" then
		return dump(t)
	elseif args[1] == "json" then
		return toJSON(t, {compress = true, sort_keys = true})
	end
	return highlight(dump(t))
end

function export.code_to_name(frame)
	return print_data(false, frame.args)
end

function export.name_to_code(frame)
	return print_data(true, frame.args)
end

function export.appendix_constructed_canonical_names()
	local names = {}
	for_code_and_data(function(code, data)
		if data.type == "appendix-constructed" then
			insert(names, data[1])
		end
	end)
	sort(names)
	return toJSON(names, {compress = true})
end

return export