Module:category tree/poscatboiler/data/scripts

Hello, you have come here looking for the meaning of the word Module:category tree/poscatboiler/data/scripts. In DICTIOUS you will not only get to know all the dictionary meanings for the word Module:category tree/poscatboiler/data/scripts, but we will also tell you about its etymology, its characteristics and you will know how to say Module:category tree/poscatboiler/data/scripts in singular and plural. Everything you need to know about the word Module:category tree/poscatboiler/data/scripts you have here. The definition of the word Module:category tree/poscatboiler/data/scripts will help you to be more precise and correct when speaking or writing your texts. Knowing the definition ofModule:category tree/poscatboiler/data/scripts, as well as those of other words, enriches your vocabulary and provides you with more and better linguistic resources.

This data submodule defines part of Wiktionary's category structure.

For an introduction to the poscatboiler system and a description of how to add or modify categories, see Module:category tree/poscatboiler/data/documentation.


local raw_categories = {}
local raw_handlers = {}

-- A list of Unicode blocks to which the characters of the script or scripts belong is created by this module
-- and displayed in script category pages.
local blocks_submodule = "Module:category tree/poscatboiler/data/scripts/blocks"



-----------------------------------------------------------------------------
--                                                                         --
--                               SCRIPT LABELS                             --
--                                                                         --
-----------------------------------------------------------------------------


--[=[
The following values are recognized for each script label:

'description'
  A plain English description for the label. Special template substitutions are recognized; see below.
'umbrella_parents'
  A table listing one or more parent categories of the umbrella category 'LABELS by script' for this label.
  The format is as for regular raw categories (see ]).
'umbrella_breadcrumb'
  The breadcrumb to use in the umbrella category 'LABELS by script'. Defaults to "by script".
'catfix'
  Same as the 'catfix' parameter for regular raw categories (see ]).
  This specifies a language code to use to ensure that pages in the category are displayed in the right font and linked
  appropriately. If this is set, the 'catfix_sc' parameter will effectively be set with the script code in question.

Special template-like parameters can be used inside the 'description' field (as well as in the 'root_description', 'root_topright' and
'root_additional' variable values initialized below). These are replaced by the equivalent text.

{{{code}}}: Script code.
{{{codes}}}: A comma-separated list of all the alias codes for this script. This applies especially to Arabic, which has
  multiple aliases (e.g. 'tt-Arab', 'ur-Arab', 'ku-Arab', etc.).
{{{codesplural}}}: The value "s" if {{{codes}}} lists more than one code, otherwise an empty string.
{{{scname}}}: The name of the script that the category belongs to.
{{{sccat}}}: The name of the script's main category, which adds "script" to the capitalized regular name.
{{{scdisp}}}: The display form of the script, which adds "script" to the regular name.
{{{scprosename}}}: Same as {{{scdisp}}} for Morse code and flag semaphore, otherwise adds "the" before {{{scdisp}}}.
{{{Wikipedia}}}: The Wikipedia article for the script (if it is present in the language's data file), or else {{{sccat}}}.
]=]

local script_labels = {}

script_labels = {
	description = "All characters from {{{scprosename}}}, and their possible variations, such as versions with diacritics and combinations recognized as single characters in any language.",
	umbrella_parents = {"Fundamental"},
	umbrella_breadcrumb = "Characters by script",
	catfix = "mul",
}

script_labels = {
	description = "Appendices about {{{scprosename}}}.",
	umbrella_parents = {"Category:Appendices"},
}

script_labels = {
	description = "Languages that use {{{scprosename}}}.",
	umbrella_parents = {"All languages"},
}

script_labels = {
	description = "Templates with predefined contents for {{{scprosename}}}.",
	umbrella_parents = {"Templates"},
}

script_labels = {
	description = "Modules that implement functionality for {{{scprosename}}}.",
	umbrella_parents = {"Modules"},
}

script_labels = {
	description = "Modules that contain data related to {{{scprosename}}}.",
	umbrella_parents = {"Data modules"},
}



-----------------------------------------------------------------------------
--                                                                         --
--                              RAW CATEGORIES                             --
--                                                                         --
-----------------------------------------------------------------------------


raw_categories = {
	description = "This category contains the categories for every script (writing system) on Wiktionary.",
	additional = "See ] for a full list.",
	parents = {"Fundamental"},
}

-- Types of writing systems listed in ].
raw_categories = {
	description = "Scripts classified by how they represent words.",
	parents = {{ name = "All scripts", sort = " " }},
	breadcrumb = "by type",
}

raw_categories = {
	description = "Scripts whose symbols represent individual speech sounds.",
	parents = {"Scripts by type"},
}

raw_categories = {
	description = "Scripts whose basic symbols represent consonants. Some of these are impure abjads, which have letters for some vowels.",
	parents = {"Scripts by type"},
}

raw_categories = {
	description = "Scripts whose symbols represent consonant and vowel combinations. Symbols representing the same consonant combined with different vowels are for the most part similar in form.",
	parents = {"Scripts by type"},
}

raw_categories = {
	description = "Scripts whose symbols represent individual words.",
	parents = {"Scripts by type"},
}

raw_categories = {
	description = "Scripts whose symbols represent individual words by using symbols that resemble the physical objects to which those words refer.",
	parents = {"Scripts by type"},
}

raw_categories = {
	description = "Scripts which are a combination of an alphabet and a syllbary.",
	parents = {"Scripts by type"},
}

raw_categories = {
	description = "Scripts whose symbols represent consonant and vowel combinations. Symbols representing the same consonant combined with different vowels are for the most part different in form.",
	parents = {"Scripts by type"},
}

for script_label, obj in pairs(script_labels) do
	raw_categories = {
		description = "Categories with " .. script_label .. " of various specific scripts.",
		breadcrumb = obj.umbrella_breadcrumb or "by script",
		parents = obj.umbrella_parents,
	}
end



-----------------------------------------------------------------------------
--                                                                         --
--                                RAW HANDLERS                             --
--                                                                         --
-----------------------------------------------------------------------------



-- Intro text for "root" categories such as ]. Template substitutions are as described above.
local root_topright = [=[<div style="clear: right; border: solid #aaa 1px; margin: 1 1 1 1; background: #f9f9f9; width: 250px; padding: 5px; text-align: left; float: right">
<div style="text-align: center; margin-bottom: 10px; margin-top: 5px">'''{{{scdisp}}}'''</div>

{| style="font-size: 90%; background: #f9f9f9"
| style="vertical-align: middle; height: 35px;" | ] || ''Wikipedia article about {{{scprosename}}}''
|-
| colspan="2" style="padding-left: 50px; border-bottom: 1px solid lightgray;" | ''']'''
|-
| style="vertical-align: middle; height: 35px;" | ] || {{{scdisp}}} considerations
|-
| colspan="2" style="padding-left: 50px; border-bottom: 1px solid lightgray;" | ''']'''
|-
| style="vertical-align: middle; height: 35px;" | ] || {{{scdisp}}} information
|-
| colspan="2" style="padding-left: 50px; border-bottom: 1px solid lightgray;" | ''']'''
|-
| style="vertical-align: Middle; height: 35px;" | ] || {{{scdisp}}} code
|-
| colspan="2" style="padding-left: 50px; border-bottom: 1px solid lightgray;" | '''{{{code}}}'''
|}
</div>]=]

-- Short description for "root" categories such as ]. Template substitutions are as described above.
local root_description = "This is the main category of '''{{{scprosename}}}'''."

-- Additional description text for "root" categories such as ]. Template substitutions are as described above.
local root_additional = ].

In various places at Wiktionary, {{{scprosename}}} is represented by the ] {{{codes}}}.]=]


-- Replace template notation {{{}}} with variables.
local function substitute_template_refs(text, sc)
	local displayForm = sc:getDisplayForm()
	local scname = sc:getCanonicalName()
	local codes = {}
	
	for code, data in pairs(mw.loadData("Module:scripts/data")) do
		if data == scname then
			table.insert(codes, "'''" .. code .. "'''")
		end
	end
	
	if codes then
		table.sort(
			codes,
			-- Four-letter codes have length 10, because they are bolded: '''Latn'''.
			function(code1, code2)
				if #code1 == 10 then
					if #code2 == 10 then
						return code1 < code2
					else
						return true
					end
				else
					if #code2 == 10 then
						return false -- four-letter codes before other codes
					else
						return code1 < code2
					end
				end
			end)
	end
	
	local content = {
		code = sc:getCode(),
		codesplural = codes and "s" or "",
		codes = table.concat(codes, ", "),
		scname = scname,
		sccat = sc:getCategoryName(),
		scdisp = displayForm,
		scprosename = (displayForm:find("code") or displayForm:find("semaphore")) and displayForm or "the " .. displayForm,
		Wikipedia = sc:getWikipediaArticle(),
	}
	
	text = string.gsub(
		text,
		"{{{(+)}}}",
		function (parameter)
			return content or error("No value for script category parameter '" .. parameter .. "'.")
		end)
	
	return text
end


local function get_root_additional(additional, sc)
	local ret = { additional }
	
	local systems = sc:getSystems()
	for _, system in ipairs(systems) do
		table.insert(ret, "\n\nThe {{{scname}}} script is ")
		if mw.ustring.sub(system:getCanonicalName(), 1, 1) == "a" then
			table.insert(ret, "an ")
		else
			table.insert(ret, "a ")
		end
		
		local singular = system:getCategoryName()
		singular = mw.getContentLanguage():lcfirst(singular)
		singular = mw.ustring.gsub(singular, "ies$", "y")
		singular = mw.ustring.gsub(singular, "s$", "")
		
		table.insert(ret, singular .. ".")
	end
	
	local blocks = require(blocks_submodule)
		.print_blocks_by_canonical_name(sc:getCanonicalName())
	
	if blocks then
		table.insert(ret, "\n")
		table.insert(ret, blocks)
	end

	return substitute_template_refs(table.concat(ret), sc)
end


local function get_script_obj(script)
	local scriptname = script:gsub(" script$", "")
	return require("Module:scripts").getByCanonicalName(scriptname) or
		-- ] vs. name of script = "undetermined" 
		require("Module:scripts").getByCanonicalName(mw.ustring.lower(scriptname))
end


local scripts_without_script_in_category = {
	-- FIXME, consider checking all scripts for names without 'script' in them.
	 = true,
	 = true,
	 = true,
}


-- Handler for 'SCRIPT script' e.g. ] as well as ] and
-- ].
table.insert(raw_handlers, function(data)
	if not data.category:match("^(.+ script)$") and not scripts_without_script_in_category then
		return nil
	end
	local sc = get_script_obj(data.category)
	if not sc then
		return nil
	end
	
	-- Compute parents.
	local parents = {}
	local systems = sc:getSystems()
	for _, system in ipairs(systems) do
		table.insert(parents, system:getCategoryName())
	end
	table.insert(parents, "All scripts")

	-- Compute (extra) children.
	local children = {}
	for script_label, _ in pairs(script_labels) do
		table.insert(children, data.category .. " " .. script_label)
	end

	return {
		topright = substitute_template_refs(root_topright, sc),
		description = substitute_template_refs(root_description, sc),
		additional = get_root_additional(root_additional, sc),
		parents = parents,
		breadcrumb = sc:getCanonicalName(),
		extra_children = children,
		can_be_empty = true,
	}
end)


-- Handler for 'SCRIPT script LABELS' e.g. ] as well as ] and
-- ].
table.insert(raw_handlers, function(data)
	local script, label
	for lab, _ in pairs(script_labels) do
		-- FIXME, if we add script labels with a hyphen in them we'll have to escape the hyphen
		-- in the following patterns.
		script, label = data.category:match("^(.+ script) (" .. lab .. ")$")
		if script then
			break
		end
		-- Check for e.g. 'Morse code characters' or 'Flag semaphore templates'.
		script, label = data.category:match("^(.+) (" .. lab .. ")$")
		if script then
			if scripts_without_script_in_category then
				break
			else
				script = nil
			end
		end
	end
	if not script then
		return nil
	end

	local sc = get_script_obj(script)
	if not sc then
		return nil
	end
	
	local label_obj = script_labels
	-- Compute description.
	local desc = substitute_template_refs(label_obj.description, sc)

	-- Compute parents.
	local parents = {
		{name = script, sort = label},
		-- umbrella category
		mw.getContentLanguage():ucfirst(label) .. " by script",
	}

	return {
		description = substitute_template_refs(label_obj.description, sc),
		parents = parents,
		breadcrumb = label,
		catfix = label_obj.catfix,
		catfix_sc = label_obj.catfix and sc:getCode(),
	}
end)


return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}