มอดูล:category tree/poscatboiler/data/อักษร
- The following documentation is generated by Template:poscatboiler data submodule documentation. [edit]
- Useful links: root page • root page’s subpages • links • transclusions • testcases • sandbox
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/อักษร/บล็อก"
-----------------------------------------------------------------------------
-- --
-- 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 [[Module:category tree/poscatboiler/data/documentation]]).
'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 [[Module:category tree/poscatboiler/data/documentation]]).
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_intro' 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 = {"มูลฐาน"},
umbrella_breadcrumb = "อักขระแบ่งตามอักษร",
catfix = "mul",
}
script_labels["ภาคผนวก"] = {
description = "ภาคผนวกเกี่ยวกับ{{{scprosename}}}",
umbrella_parents = {"หมวดหมู่:ภาคผนวก"},
}
script_labels["ภาษา"] = {
description = "ภาษาต่าง ๆ ที่ใช้{{{scprosename}}}",
umbrella_parents = {"ภาษาทั้งหมด"},
}
script_labels["แม่แบบ"] = {
description = "แม่แบบที่มีเนื้อหากำหนดไว้ล่วงหน้าสำหรับ{{{scprosename}}}",
umbrella_parents = {"แม่แบบ"},
}
script_labels["มอดูล"] = {
description = "มอดูลที่มีสคริปต์สำหรับ{{{scprosename}}}",
umbrella_parents = {"มอดูล"},
}
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["อักษรทั้งหมด"] = {
description = "This category contains the categories for every script (writing system) on Wiktionary.",
additional = "See [[Wiktionary:List of scripts]] for a full list.",
parents = {"มูลฐาน"},
}
-- Types of writing systems listed in [[Module:writing systems/data]].
raw_categories["อักษรแบ่งตามชนิด"] = {
description = "Scripts classified by how they represent words.",
parents = {{ name = "อักษรทั้งหมด", sort = " " }},
}
raw_categories["อักษรสระ-พยัญชนะ"] = {
description = "Scripts whose symbols represent individual speech sounds.",
parents = {"อักษรแบ่งตามชนิด"},
}
raw_categories["อักษรไร้สระ"] = {
description = "Scripts whose basic symbols represent consonants. Some of these are impure abjads, which have letters for some vowels.",
parents = {"อักษรแบ่งตามชนิด"},
}
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 = {"อักษรแบ่งตามชนิด"},
}
raw_categories["อักษรคำ"] = {
description = "Scripts whose symbols represent individual words.",
parents = {"อักษรแบ่งตามชนิด"},
}
raw_categories["อักษรภาพ"] = {
description = "Scripts whose symbols represent individual words by using symbols that resemble the physical objects to which those words refer.",
parents = {"อักษรแบ่งตามชนิด"},
}
raw_categories["อักษรกึ่งพยางค์"] = {
description = "Scripts which are a combination of an alphabet and a syllbary.",
parents = {"อักษรแบ่งตามชนิด"},
}
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 = {"อักษรแบ่งตามชนิด"},
}
for script_label, obj in pairs(script_labels) do
raw_categories[mw.getContentLanguage():ucfirst(script_label) .. "แบ่งตามอักษร"] = {
description = "Categories with " .. script_label .. " of various specific scripts.",
breadcrumb = obj.umbrella_breadcrumb or "แบ่งตามอักษร",
parents = obj.umbrella_parents,
}
end
-----------------------------------------------------------------------------
-- --
-- RAW HANDLERS --
-- --
-----------------------------------------------------------------------------
-- Intro text for "root" categories such as [[Category:Arabic script]]. Template substitutions are as described above.
local root_intro = [=[<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;" | [[File:Wikipedia-logo.png|35px|none|วิกิพีเดีย]] || ''บทความวิกิพีเดียเกี่ยวกับ{{{scprosename}}}''
|-
| colspan="2" style="padding-left: 50px; border-bottom: 1px solid lightgray;" | '''[[w:{{{Wikipedia}}}|{{{Wikipedia}}}]]'''
|-
| style="vertical-align: middle; height: 35px;" | [[File:Crystal kfind.png|35px|none|ข้อพิจารณา]] || ข้อพิจารณาเกี่ยวกับ{{{scdisp}}}
|-
| colspan="2" style="padding-left: 50px; border-bottom: 1px solid lightgray;" | '''[[วิกิพจนานุกรม:เกี่ยวกับ{{{scdisp}}}]]'''
|-
| style="vertical-align: middle; height: 35px;" | [[File:Book notice.png|35px|none|สารสนเทศ]] || สารสนเทศเกี่ยวกับ{{{scdisp}}}
|-
| colspan="2" style="padding-left: 50px; border-bottom: 1px solid lightgray;" | '''[[ภาคผนวก:{{{sccat}}}]]'''
|-
| style="vertical-align: Middle; height: 35px;" | [[File:Abc box.svg|35px|none|รหัส]] || รหัสของ{{{scdisp}}}
|-
| colspan="2" style="padding-left: 50px; border-bottom: 1px solid lightgray;" | '''{{{code}}}'''
|}
</div>]=]
-- Short description for "root" categories such as [[Category:Arabic script]]. Template substitutions are as described above.
local root_description = "นี่คือหมวดหมู่หลักของ'''{{{scprosename}}}'''"
-- Additional description text for "root" categories such as [[Category:Arabic script]]. Template substitutions are as described above.
local root_additional = [=[ข้อมูลเกี่ยวกับ{{{scprosename}}}อาจมีอยู่ที่ [[ภาคผนวก:{{{sccat}}}]]
ในหลาย ๆ แห่งภายในวิกิพจนานุกรม {{{scprosename}}}แทนด้วย[[Wiktionary:Scripts|รหัส]] {{{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[1] == scname then
table.insert(codes, "'''" .. code .. "'''")
end
end
if codes[2] 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[2] 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,
scprosename = sc:getCategoryName(),
Wikipedia = sc:getWikipediaArticle(),
}
text = string.gsub(
text,
"{{{([^}]+)}}}",
function (parameter)
return content[parameter] 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\nอักษร{{{scname}}}เป็น")
--[=[
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 .. ".")
--]=]
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$", "")
local scriptname = script:gsub("^อักษร", "")
return require("Module:scripts").getByCanonicalName(scriptname) or
-- [[Category:Undetermined script]] 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,
}
-- Handler for 'SCRIPT script' e.g. [[Category:Arabic script]] as well as [[Category:Morse code]] and
-- [[Category:Flag semaphore]].
table.insert(raw_handlers, function(data)
if not data.category:match("^(อักษร.+)$") and not scripts_without_script_in_category[data.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, "อักษรทั้งหมด")
-- Compute (extra) children.
local children = {}
for script_label, _ in pairs(script_labels) do
--table.insert(children, data.category .. " " .. script_label)
table.insert(children, script_label .. data.category)
end
return {
intro = substitute_template_refs(root_intro, sc),
description = substitute_template_refs(root_description, sc),
additional = get_root_additional(root_additional, sc),
parents = parents,
breadcrumb = sc:getCategoryName(),
extra_children = children,
can_be_empty = true,
}
end)
-- Handler for 'SCRIPT script LABELS' e.g. [[Category:Arabic script templates]] as well as [[Category:Morse code LABELS]] and
-- [[Category:Flag semaphore LABELS]].
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 .. ")$")
label, script = data.category:match("^(" .. lab .. ")(อักษร.+)$")
if script then
break
end
-- Check for e.g. 'Morse code characters' or 'Flag semaphore templates'.
--script, label = data.category:match("^(.+) (" .. lab .. ")$")
label, script = data.category:match("^(" .. lab .. ")(.+)$")
if script then
if scripts_without_script_in_category[script] 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[label]
-- 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) .. "แบ่งตามอักษร",
}
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}