Modul:category tree/fam/jpx
Penampilan
(Dilencongkan daripada Modul:category tree/lang/jpx)
- Berikut merupakan pendokumenan yang dijana oleh Templat:category tree data submodule documentation. [sunting]
- Pautan berguna: akar laman • sublaman akar laman • pautan • transklusi • kes ujian • kotak pasir
Submodul data ini mentakrifkan sebahagian daripada struktur kategori Wikikamus.
Untuk pengenalan kepada sistem poscatboiler dan penerangan tentang cara menambah atau mengubah suai kategori, lihat Modul:category tree/data/doc.
local labels = {}
local handlers = {}
local m_str_utils = require("Module:string utilities")
local concat = table.concat
local full_link = require("Module:links").full_link
local insert = table.insert
local Hani_sort = require("Module:Hani-sortkey").makeSortKey
local match = m_str_utils.match
local sort = table.sort
local tag_text = require("Module:script_utilities").tag_text
local ucfirst = m_str_utils.ucfirst
local Hira = require("Module:scripts").getByCode("Hira")
local Jpan = require("Module:scripts").getByCode("Jpan")
local kana_to_romaji = require("Module:Hrkt-translit").tr
local m_numeric = require("Module:ConvertNumeric")
local kana_capture = "([-" .. require("Module:ja/data/range").kana .. "・]+)"
local yomi_data = require("Module:kanjitab/data")
labels["adnominals"] = {
description = "{{{langname}}} adnominals, or {{ja-r|連%体%詞|れん%たい%し}}, which modify nouns, and do not conjugate or [[predicate#Verb|predicate]].",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["Hiragana"] = {
description = "{{{langname}}} terms with hiragana {{mdash}} {{ja-r|平%仮%名|ひら%が%な}} {{mdash}} forms, sorted by conventional hiragana sequence. The hiragana form is a [[phonetic]] representation of that word. " ..
"Wiktionary represents {{{langname}}}-language segments in three ways: in normal form (with [[kanji]], if appropriate), in [[hiragana]] " ..
"form (this differs from kanji form only when the segment contains kanji), and in [[romaji]] form.",
additional = "''Lihat juga'' [[:Kategori:Katakana bahasa {{{langname}}}]]",
toc_template = "Hira-categoryTOC",
toc_template_full = "Hira-categoryTOC/full",
parents = {
{name = "{{{langcat}}}", raw = true},
"Kategori:Aksara Tulisan Hiragana",
}
}
labels["historical hiragana"] = {
description = "{{{langname}}} historical [[hiragana]].",
additional = "''See also'' [[:Category:{{{langname}}} historical katakana]].",
toc_template = "Hira-categoryTOC",
toc_template_full = "Hira-categoryTOC/full",
parents = {
"Hiragana",
{name = "{{{langcat}}}", raw = true},
"Kategori:Aksara Tulisan Hiragana",
}
}
labels["Katakana"] = {
description = "{{{langname}}} terms with katakana {{mdash}} {{ja-r|片%仮%名|かた%か%な}} {{mdash}} forms, sorted by conventional katakana sequence. Katakana is used primarily for transliterations of foreign words, including old Chinese hanzi not used in [[shinjitai]].",
additional = "''Lihat juga'' [[:Kategori:Hiragana bahasa {{{langname}}}]]",
toc_template = "Kana-categoryTOC",
toc_template_full = "Kana-categoryTOC/full",
parents = {
{name = "{{{langcat}}}", raw = true},
"Kategori:Aksara Tulisan Katakana",
}
}
labels["historical katakana"] = {
description = "{{{langname}}} historical [[katakana]].",
additional = "''See also'' [[:Category:{{{langname}}} historical hiragana]].",
toc_template = "Kana-categoryTOC",
toc_template_full = "Kana-categoryTOC/full",
parents = {
"Katakana",
{name = "{{{langcat}}}", raw = true},
"Kategori:Aksara Tulisan Katakana",
}
}
labels["Perkataan dieja dengan kana campuran"] = {
description = "{{{langname}}} terms which combine [[hiragana]] and [[katakana]] characters, potentially with [[kanji]] too.",
parents = {
{name = "{{{langcat}}}", raw = true},
"Hiragana",
"Katakana",
},
}
labels["Kanji"] = {
topright = "{{wp|Kanji}}",
description = "Simbol bahasa {{{langname}}} yang merupakan sebahagian daripada tulisan logogram Han, yang boleh mewakili bunyi atau menyampaikan makna secara langsung.",
toc_template = "Hani-categoryTOC",
umbrella = "Aksara Han",
parents = "Logogram",
}
labels["Kanji mengikut bacaan"] = {
description = "Kanji bahasa {{{langname}}} yang dikategorikan mengikut bacaan.",
parents = {{name = "Kanji", sort = "bacaan"}},
}
labels["Makurakotoba"] = {
topright = "{{wp|Makurakotoba}}",
description = "{{{langname}}} idioms used in poetry to introduce specific words.",
parents = {"Peribahasa"},
}
labels["Perkataan mengikut bacaan kanji"] = {
description = "Kategori bahasa {{{langname}}} yang dikumpulkan berdasarkan bacaan kanji yang dieja dengannya.",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["Perkataan mengikut pola bacaan"] = {
description = "Kategori bahasa {{{langname}}} dengan perkataan yang dikumpulkan berdasarkan corak bacaannya.",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["Perkataan mengikut bilangan aksara kanji"] = {
description = "Perkataan bahasa {{{langname}}} dikategorikan mengikut bilangan aksara kanji.",
parents = {"Perkataan mengikut sifat ortografi"},
}
local function handle_onyomi_list(category, category_type, cat_yomi_type)
local onyomi, seen = {}, {}
for _, yomi in pairs(yomi_data) do
if not seen[yomi] and yomi.onyomi then
local yomi_catname = yomi[category_type]
if yomi_catname ~= false then
local yomi_type = yomi.type
if yomi_type ~= "on'yomi" and yomi_type ~= cat_yomi_type then
insert(onyomi, "[[:Kategori:" .. category:gsub("{{{yomi_catname}}}", yomi_catname) .. " bahasa {{{langname}}}]]")
end
end
end
seen[yomi] = true
end
sort(onyomi)
return onyomi
end
local function add_yomi_category(category, category_type, parent, description)
for _, yomi in pairs(yomi_data) do
local yomi_catname = yomi[category_type]
if yomi_catname ~= false then
local yomi_type = yomi.type
local yomi_desc = yomi.link or yomi_catname
if yomi.description then
yomi_desc = yomi_desc .. "; " .. yomi.description
end
local label = {
description = description .. " " .. yomi_desc .. ".",
breadcrumb = yomi_type,
parents = {{name = parent, sort = yomi_catname}},
}
if yomi.onyomi then
local onyomi = handle_onyomi_list(category, category_type, yomi_type)
label.additional = "Kategori untuk perkataan dengan " ..
(yomi_type == "on'yomi" and "pelbagai lagi" or "lain-lain") ..
" jenis spesifik bacaan on'yomi boleh ditemukan pada kategori berikut:\n* " .. concat(onyomi, "\n* ")
if yomi_type ~= "on'yomi" then
insert(label.parents, 1, {
name = (category:gsub("{{{yomi_catname}}}", yomi_data.on[category_type])),
sort = yomi_catname
})
end
end
labels[category:gsub("{{{yomi_catname}}}", yomi_catname)] = label
end
end
end
add_yomi_category(
"Perkataan dengan bacaan {{{yomi_catname}}}",
"reading_category",
"Perkataan mengikut pola bacaan",
"Perkataan bahasa {{{langname}}} dengan bacaan"
)
add_yomi_category(
"Perkataan dieja dengan kanji dengan bacaan {{{yomi_catname}}}",
"kanji_category",
"Perkataan mengikut jenis bacaan kanji",
"Kategori bahasa {{{langname}}} dengan perkataan yang dieja dengan satu atau lebih banyak aksara kanji dengan bacaan"
)
labels["Perkataan kehilangan yomi"] = {
description = "Perkataan bahasa {{{langname}}} yang kehilangan satu atau lebih [[Lampiran:Glosari bahasa Jepun#yomi|yomi]] dalam {{tl|{{{langcode}}}-kanjitab}}.",
hidden = true,
can_be_empty = true,
parents = {"Penyelenggaraan entri"},
}
labels["terms with IPA pronunciation with pitch accent"] = {
description = "{{{langname}}} terms with pronunciations that have {{w|Japanese pitch accent|pitch accent}} specified.",
additional = "Pitch accent can be specified in {{tl|{{{langcode}}}-pron}} with the {{code|=acc=}} parameter.",
can_be_empty = true,
parents = {"Penyelenggaraan entri", "pitch accent"},
}
labels["terms with IPA pronunciation missing pitch accent"] = {
description = "{{{langname}}} terms with pronunciations that do not have a {{w|Japanese pitch accent|pitch accent}} specified.",
additional = "Pitch accent can be specified in {{tl|{{{langcode}}}-pron}} with the {{code|=acc=}} parameter.",
hidden = true,
can_be_empty = true,
parents = {"Penyelenggaraan entri"},
}
labels["pitch accent"] = {
description = "{{{langname}}} terms regarding {{w|Japanese pitch accent|pitch accent}} pronunciation.",
can_be_empty = true,
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["terms with Heiban pitch accent (Tōkyō)"] = {
description = "{{{langname}}} terms with pronunciations that are (Tōkyō) [[平板型|Heiban]] {{w|Japanese pitch accent|pitch accent}}.",
can_be_empty = true,
parents = {"pitch accent"}
}
labels["terms with Atamadaka pitch accent (Tōkyō)"] = {
description = "{{{langname}}} terms with pronunciations that are (Tōkyō) [[頭高型|Atamadaka]] {{w|Japanese pitch accent|pitch accent}}.",
can_be_empty = true,
parents = {"pitch accent"}
}
labels["terms with Nakadaka pitch accent (Tōkyō)"] = {
description = "{{{langname}}} terms with pronunciations that are (Tōkyō) [[中高型|Nakadaka]] {{w|Japanese pitch accent|pitch accent}}.",
can_be_empty = true,
parents = {"pitch accent"}
}
labels["terms with Odaka pitch accent (Tōkyō)"] = {
description = "{{{langname}}} terms with pronunciations that are (Tōkyō) [[尾高型|Odaka]] {{w|Japanese pitch accent|pitch accent}}.",
can_be_empty = true,
parents = {"pitch accent"}
}
labels["terms with complex pitch accent (Tōkyō)"] = {
description = "{{{langname}}} terms with pronunciations that are (Tōkyō) complex {{w|Japanese pitch accent|pitch accent}}, as in having more than one {{m|ja|アクセント句}}.",
can_be_empty = true,
parents = {"pitch accent"}
}
labels["pitch accent deaccenting before の"] = {
description = "{{{langname}}} terms with {{w|Japanese pitch accent|pitch accent}} pronunciations that have exceptional deaccenting or lack thereof before の ({{ja-deaccenting-before-no}}).",
can_be_empty = true,
parents = {"pitch accent"}
}
labels["terms with Odaka pitch accent not deaccented before の (Tōkyō)"] = {
description = "{{{langname}}} terms with pronunciations that are (Tōkyō) [[尾高型|Odaka]] {{w|Japanese pitch accent|pitch accent}} and do not become deaccented before の ({{ja-deaccenting-before-no}}).\n\nTerms are placed in this category using {{tl|ja-odaka-deaccent-exception}}.",
can_be_empty = true,
parents = {"pitch accent deaccenting before の"}
}
labels["terms with Nakadaka pitch accent deaccented before の (Tōkyō)"] = {
description = "{{{langname}}} terms with pronunciations that are (Tōkyō) [[中高型|Nakadaka]] {{w|Japanese pitch accent|pitch accent}} and become deaccented before の ({{ja-deaccenting-before-no}}).\n\nTerms are placed in this category using {{tl|ja-nakadaka-deaccent}}.",
can_be_empty = true,
parents = {"pitch accent deaccenting before の"}
}
labels["Perkataan mengikut jenis bacaan kanji"] = {
description = "{{{langname}}} categories with terms grouped with regard to the types of readings of the kanji with which " ..
"they are spelled; broadly, those of Chinese origin, {{ja-r|音|おん}} readings, and those of non-Chinese origin, {{ja-r|訓|くん}} readings.",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["Perkataan dieja dengan ateji"] = {
topright = "{{wp|Ateji}}",
description = "{{{langname}}} terms containing one or more [[Appendix:Japanese glossary#ateji|ateji]] {{mdash}} {{ja-r|当て字|あてじ}} {{mdash}} which are [[kanji]] used to represent sounds rather than meanings (though meaning may have some influence on which kanji are chosen).",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["Perkataan dieja dengan daiyōji"] = {
description = "Japanese terms spelled using [[Appendix:Japanese glossary#daiyouji|daiyōji]], categorized using {{temp|ja-daiyouji}}.",
parents = {"Perkataan mengikut etimologi"},
}
labels["Perkataan dieja dengan jukujikun"] = {
description = "{{{langname}}} terms containing one or more [[Appendix:Japanese glossary#jukujikun|jukujikun]] {{mdash}} {{ja-r|熟%字%訓|じゅく%じ%くん}} {{mdash}} which are [[kanji]] used to represent meanings rather than sounds.",
parents = {{name = "{{{langcat}}}", raw = true}},
}
local function add_grade_categories(grade, desc, wp, only_one, parent, sort)
local grade_kanji = "Kanji " .. grade
local topright = wp and ("{{wp|%s}}"):format(ucfirst(grade_kanji)) or nil
labels[grade_kanji] = {
topright = topright,
description = "Kanji bahasa {{{langname}}} " .. desc,
toc_template = "Hani-categoryTOC",
parents = {{
name = parent and ("Kanji " .. parent) or "Kanji",
sort = sort or grade
}},
}
labels["Perkataan dieja dengan " .. grade_kanji:lower()] = {
topright = topright,
description = "Perkataan bahasa {{{langname}}} yang dieja dengan " .. (only_one and "sekurang-kurangnya satu " or "") .. " aksara kanji " .. desc,
parents = {{
name = parent and ("Perkataan dieja dengan kanji " .. parent) or "Perkataan mengikut sifat ortografi",
sort = sort or grade
}},
}
end
for i = 1, 6 do
local ord = m_numeric.ones_position_ord[i]
add_grade_categories(
"gred " .. ord,
"diajar dalam gred " .. ord .. " sekolah rendah, seperti yang ditetapkan oleh senarai rasmi {{ja-r|教%育 漢%字|きょう%いく かん%じ|sukatan pendidikan kanji}}.",
false,
false,
"kyōiku",
i
)
end
add_grade_categories(
"kyōiku",
"pada senarai rasmi {{ja-r|教%育 漢%字|きょう%いく かん%じ|sukatan pendidikan kanji}}.",
true,
false,
"jōyō"
)
add_grade_categories(
"sekolah menengah",
"pada senarai rasmi {{ja-r|常%用 漢%字|じょう%よう かん%じ|aksara penggunaan biasa}} yang secara umumnya diajar pada peringkat sekolah menengah.",
false,
false,
"jōyō"
)
add_grade_categories(
"jōyō",
"pada senarai rasmi {{ja-r|常%用 漢%字|じょう%よう かん%じ|aksara penggunaan biasa}}.",
true,
false
)
add_grade_categories(
"tōyō",
"pada senarai rasmi {{ja-r|常%用 漢%字|じょう%よう かん%じ|aksara penggunaan biasa}}, yang digunakan pada sekitar tahun 1946{{ndash}}1981 sehingga penerbitan senarai {{ja-r|常%用 漢%字|じょう%よう かん%じ|aksara penggunaan biasa}}.",
true,
false
)
add_grade_categories(
"jinmeiyō",
"pada senarai rasmi {{ja-r|人%名%用 漢%字|じん%めい%-よう かん%じ|kanji untuk kegunaan nama peribadi}}.",
true,
true
)
add_grade_categories(
"hyōgai",
"tidak termasuk pada senarai rasmi {{ja-r|常%用 漢%字|じょう%よう かん%じ|aksara kegunaan kerap}} atau {{ja-r|人%名%用 漢%字|じん%めい%-よう かん%じ|kanji untuk kegunaan nama peribadi}}, yang dikenali sebagai {{ja-r|表%外 漢%字|ひょう%がい かん%じ}} atau {{ja-r|表%外%字|ひょう%がい%じ|aksara tidak tersenarai}}.",
true,
true
)
labels["Perkataan dengan berbilang bacaan"] = {
description = "Perkataan bahasa {{{langname}}} dengan berbilang cara sebutan (maka juga sama dengan berbilang ejaan [[kana]]).",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["Bacaan kanji mengikut bilangan mora"] = {
description = "Kategori-kategori bahasa {{{langname}}} dikumpulkan berdasarkan bilangan mora dalam bacaan kanji.",
parents = {{name = "{{{langcat}}}", raw = true}},
}
labels["Perkataan kanji tunggal"] = {
description = "Perkataan {{{langname}}} yang ditulis dengan kanji tunggal.",
parents = {
"Perkataan mengikut sifat ortografi",
{name = "Perkataan dengan 1 aksara kanji", sort = " "},
},
}
labels["kanji with kun readings missing okurigana designation"] = {
breadcrumb = "Kanji missing okurigana designation",
description = "{{{langname}}} kanji entries in which one or more kun readings entered into {{tl|{{{langcode}}}-readings}} is missing a hyphen denoting okurigana.",
toc_template = "Hani-categoryTOC",
hidden = true,
can_be_empty = true,
parents = {"Penyelenggaraan entri"},
}
labels["Perkataan mengikut aksara individu dalam ejaan sejarah"] = {
breadcrumb = "Bersejarah",
description = "{{{langname}}} terms categorized by whether their spellings in the {{w|historical kana orthography}} included certain individual characters.",
parents = {{name = "Perkataan mengikut aksara individu", sort = " "}},
}
labels["Kata kerja tanpa ketransitifan"] = {
description = "{{{langname}}} verbs missing the {{code|=tr=}} parameter from their headword templates.",
hidden = true,
can_be_empty = true,
parents = {"Penyelenggaraan entri"},
}
labels["Yojijukugo"] = {
topright = "{{wp|Yojijukugo}}",
description = "{{{langname}}} four-[[kanji]] compound terms, {{ja-r|四%字 熟%語|よ%じ じゅく%ご}}, with idiomatic meanings; typically derived from Classical Chinese, Buddhist scripture or traditional Japanese proverbs.",
additional = "Compare Chinese {{w|chengyu}} and Korean {{w|sajaseong-eo}}.",
umbrella = "peribahasa empat aksara",
parents = {"Peribahasa"},
}
-- FIXME: Only works for 0 through 19.
local word_to_number = {}
for k, v in pairs(m_numeric.ones_position) do
word_to_number[v] = k
end
local periods = {
lama = true,
kuno = true,
}
local function get_period_text_and_reading_type_link(period, reading_type)
if period and not periods[period] then
return nil
end
local period_text = period and " " .. period or nil
-- Allow periods (historical or ancient) by themselves; they will parse as reading types.
if not period and periods[reading_type] then
return nil, reading_type
end
local reading_type_link = "[[Lampiran:Glosari bahasa Jepun#" .. reading_type .. "|" .. reading_type .. "]]"
return period_text, reading_type_link
end
local function get_sc(str)
return match(str:gsub("[%s%p]+", ""), "[^" .. Hira:getCharacters() .. "]") and Jpan or Hira
end
local function get_tagged_reading(reading, lang)
return tag_text(reading, lang, get_sc(reading))
end
local function get_reading_link(reading, lang, period, link)
local hist = periods[period]
reading = reading:gsub("[%.%-%s]+", "")
return full_link({
lang = lang,
sc = get_sc(reading),
term = link or reading:gsub("・", ""),
-- If we have okurigana, demarcate furigana.
alt = reading:gsub("^(.-)・", "<span style=\"border-top:1px solid;position:relative;padding:1px;\">%1<span style=\"position:absolute;top:0;bottom:67%%;right:0%%;border-right:1px solid;\"></span></span>"),
tr = kana_to_romaji((reading:gsub("・", ".")), lang:getCode(), nil, {keep_dot = true, hist = hist})
:gsub("^(.-)%.", "<u>%1</u>"),
pos = reading:find("・", 1, true) and get_tagged_reading((reading:gsub("^.-・", "~")), lang) or nil
}, "term")
end
local function is_on_subtype(reading_type)
return reading_type:find(".on$")
end
insert(handlers, function(data)
local n =data.label:match("^Perkataan dengan ([1-9]%d*) aksara kanji$")
if not n then
return
end
local sortkey = require("Module:category tree").numeral_sortkey(n, 2097152)
return {
breadcrumb = n,
description = ("Perkataan bahasa {{{langname}}} yang mengandungi tepat %d aksara kanji."):format(n),
-- TODO: implement this using the same mechanism used to implement parents (i.e. avoiding the need for raw categories).
-- umbrella = {
-- breadcrumb = ("%d kanji"):format(n),
-- parents = {{name = "terms by number of kanji subcategories by language", sort = sortkey}},
-- },
parents = {{name = ("Perkataan mengikut bilangan aksara kanji"), sort = sortkey}}
}
end)
insert(handlers, function(data)
local label_pref, kana = data.label:match("^(Perkataan yang mengikut sejarah dieja dengan )" .. kana_capture .. "$")
if not kana then
return
end
local lang = data.lang
return {
description = "Perkataan bahasa {{{langname}}} yang dieja dengan " .. get_reading_link(kana, lang, "bersejarah") .. " dalam {{w|ortografi kana sejarawi}}.",
displaytitle = label_pref .. get_tagged_reading(kana, lang) .. " bahasa {{{langname}}}",
breadcrumb = "sejarah",
parents = {
{name = "Perkataan dieja dengan " .. kana, sort = " "},
{name = "Perkataan mengikut aksara individu dalam ejaan sejarah", sort = lang:makeSortKey(kana)}
},
umbrella = false,
}
end)
insert(handlers, function(data)
local count, plural = data.label:match("^Bacaan kanji dengan (.+) mora$")
local num = word_to_number[count]
if not num then
return nil
end
return {
description = "Bacaan kanji bahasa {{{langname}}} yang mengandungi " .. count .. " mora.",
breadcrumb = num,
parents = {{name = "Bacaan kanji mengikut bilangan mora", sort = num}},
umbrella = false,
}
end)
insert(handlers, function(data)
local label_pref, period, reading_type, reading = match(data.label, "^(Kanji dengan bacaan ([a-z]-) ?([%a']+) )" .. kana_capture .. "$")
if not period then
return
end
period = period ~= "" and period or nil
local period_text, reading_type_link = get_period_text_and_reading_type_link(period, reading_type)
if not reading_type_link then
return
end
local lang = data.lang
-- Compute parents.
local parents, breadcrumb = {}
if reading:find("・", 1, true) then
local okurigana = reading:match("・(.*)")
insert(parents, {
name = "Kanji dengan bacaan" .. (period_text or "") .. " ".. reading_type .. " " .. reading:match("(.-)・"),
-- Sort by okurigana, since all coordinate categories will have the same furigana.
sort = (lang:makeSortKey(okurigana))
})
breadcrumb = "~" .. okurigana
else
insert(parents, {
name = "Kanji mengikut bacaan" .. (period_text or "") .. " " .. reading_type,
sort = (lang:makeSortKey(reading))
})
breadcrumb = reading
end
if is_on_subtype(reading_type) then
insert(parents, {name = "Kanji dengan bacaan" .. (period_text or "") .. " on " .. reading, sort = reading_type})
elseif period_text then
insert(parents, {name = "Kanji dengan bacaan" .. period_text .. " " .. reading, sort = reading_type})
end
if not period_text then
insert(parents, {name = "Kanji dibaca sebagai " .. reading, sort = reading_type})
end
return {
description = "Aksara [[kanji]] bahasa {{{langname}}} dengan bacaan " .. reading_type_link .. " " ..
get_reading_link(reading, lang, period or reading_type) .. ".",
displaytitle = "{{{langname}}} " .. label_pref .. get_tagged_reading(reading, lang),
breadcrumb = get_tagged_reading(breadcrumb, lang),
parents = parents,
umbrella = false,
}
end)
insert(handlers, function(data)
local period, reading_type = match(data.label, "^Kanji mengikut bacaan ([a-z]-) ?([%a']+)$")
if not period then
return
end
period = period ~= "" and period or nil
local period_text, reading_type_link = get_period_text_and_reading_type_link(period, reading_type)
if not reading_type_link then
return nil
end
-- Compute parents.
local parents = {
is_on_subtype(reading_type) and {name = "Kanji mengikut bacaan" .. (period_text or "") .. " on", sort = reading_type} or
period_text and {name = "Kanji mengikut bacaan " .. reading_type, sort = period} or
{name = "Kanji mengikut bacaan", sort = reading_type}
}
if period_text then
insert(parents, {name = "Kanji mengikut bacaan" .. period_text, sort = reading_type})
end
-- Compute description.
local description = "[[kanji|Kanji]] bahasa {{{langname}}} dikategorikan mengikat bacaan " .. (period_text or "") .. reading_type_link .. "."
return {
description = description,
breadcrumb = reading_type .. (period_text or ""),
parents = parents,
umbrella = false,
}
end)
insert(handlers, function(data)
local label_pref, reading = match(data.label, "^(Kanji dibaca sebagai )" .. kana_capture .. "$")
if not reading then
return
end
local args = require("Module:parameters").process(data.args, {
["histconsol"] = true,
})
local lang = data.lang
local parents, breadcrumb = {}
if reading:find("・", 1, true) then
local okurigana = reading:match("・(.*)")
insert(parents, {
name = "Kanji dibaca sebagai " .. reading:match("(.-)・"),
-- Sort by okurigana, since all coordinate categories will have the same furigana.
sort = (lang:makeSortKey(okurigana))
})
breadcrumb = "~" .. okurigana
else
insert(parents, {
name = "Kanji mengikut bacaan",
sort = (lang:makeSortKey(reading))
})
breadcrumb = reading
end
local addl
local period_text
if args.histconsol then
period_text = "lama"
addl = ("This is a [[Wikipedia:Historical kana orthography|historical]] [[Wikipedia:Kanazukai|reading]], now " ..
"consolidated with the [[Wikipedia:Modern kana usage|modern reading]] of " ..
get_reading_link(args.histconsol, lang, nil, ("Kategori:Kanji dibaca sebagai %s bahasa Jepun"):format(args.histconsol)) .. ".")
end
return {
description = "[[kanji|Kanji]] bahasa {{{langname}}} dibaca sebagai " .. get_reading_link(reading, lang, period_text) .. ".",
additional = addl,
displaytitle = label_pref .. get_tagged_reading(reading, lang) .. " bahasa {{{langname}}}" ,
breadcrumb = get_tagged_reading(breadcrumb, lang),
parents = parents,
umbrella = false,
}, true
end)
insert(handlers, function(data)
local label_pref, reading = match(data.label, "^(Perkataan dieja dengan kanji dibaca sebagai )" .. kana_capture .. "$")
if not reading then
return
end
-- Compute parents.
local lang = data.lang
local sort_key = (lang:makeSortKey(reading))
local mora_count = require("Module:ja").count_morae(reading)
local mora_count_words = m_numeric.spell_number(tostring(mora_count))
local parents = {
{name = "Perkataan mengikut bacaan kanji", sort = sort_key},
{name = "Bacaan kanji dengan " .. mora_count_words .. " mora", sort = sort_key},
{name = "Kanji dibaca sebagai " .. reading, sort = " "},
}
local tagged_reading = get_tagged_reading(reading, lang)
return {
description = "{{{langname}}} terms that contain kanji that exhibit a reading of " .. get_reading_link(reading, lang) ..
" in those terms prior to any sound changes.",
displaytitle = "{{{langname}}} " .. label_pref .. tagged_reading,
breadcrumb = tagged_reading,
parents = parents,
umbrella = false,
}
end)
insert(handlers, function(data)
local kanji, reading = match(data.label, "^Perkataan dieja dengan (.) dibaca sebagai " .. kana_capture .. "$")
if not kanji then
return nil
end
local args = require("Module:parameters").process(data.args, {
[1] = {list = true},
})
local lang = data.lang
if #args[1] == 0 then
error("Bagi kategori dalam bentuk \"" .. lang:getCanonicalName() ..
" terms spelled with KANJI dibaca sebagai READING\", at least one reading type (e.g. <code>kun</code> or <code>on</code>) must be specified using <code>1=</code>, <code>2=</code>, <code>3=</code>, etc.")
end
local yomi_types, parents = {}, {}
for _, yomi, category in ipairs(args[1]) do
local yomi_data = yomi_data[yomi]
if not yomi_data then
error("Jenis yomi \"" .. yomi .. "\" tidak sah.")
end
category = yomi_data.kanji_category
if not category then
error("Jenis yomi \"" .. yomi .. "\" tidak sah bagi jenis kategori ini.")
end
insert(yomi_types, yomi_data.link)
insert(parents, {
name = "Perkataan dieja dengan kanji dengan bacaan " .. category,
sort = (lang:makeSortKey(reading))
})
end
insert(parents, 1, {name = "Perkataan dieja dengan " .. kanji, sort = (lang:makeSortKey(reading))})
insert(parents, 2, {name = "Perkataan dieja dengan kanji dibaca sebagai " .. reading, sort = Hani_sort(kanji)})
yomi_types = (#yomi_types > 1 and "one of " or "") .. "its " ..
require("Module:table").serialCommaJoin(yomi_types, {conj = "or"}) ..
" reading" .. (#yomi_types > 1 and "s" or "")
local tagged_kanji = get_tagged_reading(kanji, lang)
local tagged_reading = get_tagged_reading(reading, lang)
return {
description = "{{{langname}}} terms spelled with {{l|{{{langcode}}}|" .. kanji .. "}} with " ..
yomi_types .. " of " .. get_reading_link(reading, lang) .. ".",
displaytitle = "{{{langname}}} terms spelled with " .. tagged_kanji .. " dibaca sebagai " .. tagged_reading,
breadcrumb = "dibaca sebagai " .. tagged_reading,
parents = parents,
umbrella = false,
}, true
end)
insert(handlers, function(data)
local affix, kanji, reading = data.label:match("^Perkataan dengan ([a-z]) (.+) dibaca sebagai " .. kana_capture .. "$")
if not affix or not kanji or not reading then
return nil
end
local args = require("Module:parameters").process(data.args, {
[1] = {list = true},
})
local lang = data.lang
if #args[1] == 0 then
error("Bagi kategori dalam bentuk \"" .. lang:getCanonicalName() ..
" perkataan dengan AFFIX KANJI dibaca sebagai READING\", at least one reading type (e.g. <code>kun</code> or <code>on</code>) must be specified using <code>1=</code>, <code>2=</code>, <code>3=</code>, etc.")
end
local yomi_types = {}
for _, yomi, category in ipairs(args[1]) do
local yomi_data = yomi_data[yomi]
if not yomi_data then
error("Jenis yomi \"" .. yomi .. "\" tidak sah.")
end
category = yomi_data.kanji_category
if not category then
error("Jenis yomi \"" .. yomi .. "\" tidak sah bagi jenis kategori ini.")
end
insert(yomi_types, yomi_data.link)
end
yomi_types = (#yomi_types > 1 and "one of " or "") .. "its " ..
require("Module:table").serialCommaJoin(yomi_types, {conj = "or"}) ..
" reading" .. (#yomi_types > 1 and "s" or "")
local description = "{{{langname}}} terms " .. affix .. "ed with {{l|{{{langcode}}}|" .. kanji .. "}} with " ..
yomi_types .. " of " .. get_reading_link(reading, lang) .. "."
local ok, what_categorizes = pcall(require, "Module:category tree/fam/jpx/what-categorizes-msg")
if ok and what_categorizes.get_what_categorizes_msg then
local what_categorizes_msg = what_categorizes.get_what_categorizes_msg(kanji, reading, affix)
if what_categorizes_msg then
description = description .. "\n\n" .. what_categorizes_msg
end
end
local parents = {}
table.insert(parents, {name = "Perkataan dengan " .. affix .. " " .. kanji, sort = (lang:makeSortKey(reading))})
if mw.title.new("Kategori:Perkataan dieja dengan " .. kanji .. " dibaca sebagai " .. reading .. " bahasa " .. lang:getCanonicalName()).exists then
table.insert(parents, {name = "Perkataan dieja dengan " .. kanji .. " dibaca sebagai " .. reading, sort = (lang:makeSortKey(reading)), args=data.args})
end
local tagged_kanji = get_tagged_reading(kanji, lang)
local tagged_reading = get_tagged_reading(reading, lang)
return {
description = description,
displaytitle = "{{{langname}}} terms " .. affix .. "ed with " .. tagged_kanji .. " dibaca sebagai " .. tagged_reading,
breadcrumb = "dibaca sebagai " .. reading,
parents = parents,
umbrella = false,
}, true
end)
insert(handlers, function(data)
local kanji, daiyoji = match(data.label, "^Perkataan dengan (.) digantikan oleh daiyōji (.)$")
if not kanji then
return nil
end
local args = require("Module:parameters").process(data.args, {
["sort"] = true,
})
local lang = data.lang
if not args.sort then
error("For categories of the form \"" .. lang:getCanonicalName() ..
" terms with KANJI replaced by daiyōji DAIYOJI\", the sort key must be specified using sort=")
end
local tagged_kanji = get_tagged_reading(kanji, lang)
local tagged_daiyoji = get_tagged_reading(daiyoji, lang)
return {
description = "{{{langname}}} terms with {{l|{{{langcode}}}|" .. kanji .. "}} replaced by [[Appendix:Japanese glossary#daiyouji|daiyōji]] {{l|{{{langcode}}}|" .. daiyoji .. "}}.",
displaytitle = "{{{langname}}} terms with " .. tagged_kanji .. " replaced by daiyōji " .. tagged_daiyoji,
breadcrumb = tagged_kanji .. " replaced by daiyōji " .. tagged_daiyoji,
parents = {{name = "Perkataan dieja dengan daiyōji", sort = args.sort}},
umbrella = false,
}, true
end)
return {LABELS = labels, HANDLERS = handlers}