<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Acategory_tree%2Ffam%2Fjpx</id>
	<title>Module:category tree/fam/jpx - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Acategory_tree%2Ffam%2Fjpx"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:category_tree/fam/jpx&amp;action=history"/>
	<updated>2026-04-22T07:15:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:category_tree/fam/jpx&amp;diff=494736&amp;oldid=prev</id>
		<title>Sware: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:category_tree/fam/jpx&amp;diff=494736&amp;oldid=prev"/>
		<updated>2026-04-21T11:22:33Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:22, 21 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:category_tree/fam/jpx&amp;diff=494735&amp;oldid=prev</id>
		<title>wikt&gt;Shlyst: unify Japanese&#039;s what_categorizes_msg Module:category tree/fam/jpx/what-categorizes-msg</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:category_tree/fam/jpx&amp;diff=494735&amp;oldid=prev"/>
		<updated>2026-04-11T01:46:26Z</updated>

		<summary type="html">&lt;p&gt;unify Japanese&amp;#039;s what_categorizes_msg &lt;a href=&quot;/wiki/Module:category_tree/fam/jpx/what-categorizes-msg&quot; title=&quot;Module:category tree/fam/jpx/what-categorizes-msg&quot;&gt;Module:category tree/fam/jpx/what-categorizes-msg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local labels = {}&lt;br /&gt;
local handlers = {}&lt;br /&gt;
&lt;br /&gt;
local m_str_utils = require(&amp;quot;Module:string utilities&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local concat = table.concat&lt;br /&gt;
local full_link = require(&amp;quot;Module:links&amp;quot;).full_link&lt;br /&gt;
local insert = table.insert&lt;br /&gt;
local Hani_sort = require(&amp;quot;Module:Hani-sortkey&amp;quot;).makeSortKey&lt;br /&gt;
local match = m_str_utils.match&lt;br /&gt;
local sort = table.sort&lt;br /&gt;
local tag_text = require(&amp;quot;Module:script_utilities&amp;quot;).tag_text&lt;br /&gt;
local ucfirst = m_str_utils.ucfirst&lt;br /&gt;
&lt;br /&gt;
local Hira = require(&amp;quot;Module:scripts&amp;quot;).getByCode(&amp;quot;Hira&amp;quot;)&lt;br /&gt;
local Jpan = require(&amp;quot;Module:scripts&amp;quot;).getByCode(&amp;quot;Jpan&amp;quot;)&lt;br /&gt;
local kana_to_romaji = require(&amp;quot;Module:Hrkt-translit&amp;quot;).tr&lt;br /&gt;
local m_numeric = require(&amp;quot;Module:ConvertNumeric&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local kana_capture = &amp;quot;([-&amp;quot; .. require(&amp;quot;Module:ja/data/range&amp;quot;).kana .. &amp;quot;・]+)&amp;quot;&lt;br /&gt;
local yomi_data = require(&amp;quot;Module:kanjitab/data&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;adnominals&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} adnominals, or {{ja-r|連%体%詞|れん%たい%し}}, which modify nouns, and do not conjugate or [[predicate#Verb|predicate]].&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;hiragana&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with hiragana {{mdash}} {{ja-r|平%仮%名|ひら%が%な}} {{mdash}} forms, sorted by conventional hiragana sequence. The hiragana form is a [[phonetic]] representation of that word. &amp;quot; ..&lt;br /&gt;
	&amp;quot;Wiktionary represents {{{langname}}}-language segments in three ways: in normal form (with [[kanji]], if appropriate), in [[hiragana]] &amp;quot; ..&lt;br /&gt;
	&amp;quot;form (this differs from kanji form only when the segment contains kanji), and in [[romaji]] form.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;&amp;#039;&amp;#039;See also&amp;#039;&amp;#039; [[:Category:{{{langname}}} katakana]]&amp;quot;,&lt;br /&gt;
	toc_template = &amp;quot;Hira-categoryTOC&amp;quot;,&lt;br /&gt;
	toc_template_full = &amp;quot;Hira-categoryTOC/full&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true},&lt;br /&gt;
		&amp;quot;Category:Hiragana script characters&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;historical hiragana&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} historical [[hiragana]].&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;&amp;#039;&amp;#039;See also&amp;#039;&amp;#039; [[:Category:{{{langname}}} historical katakana]].&amp;quot;,&lt;br /&gt;
	toc_template = &amp;quot;Hira-categoryTOC&amp;quot;,&lt;br /&gt;
	toc_template_full = &amp;quot;Hira-categoryTOC/full&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;hiragana&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true},&lt;br /&gt;
		&amp;quot;Category:Hiragana script characters&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;katakana&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{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]].&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;&amp;#039;&amp;#039;See also&amp;#039;&amp;#039; [[:Category:{{{langname}}} hiragana]]&amp;quot;,&lt;br /&gt;
	toc_template = &amp;quot;Kana-categoryTOC&amp;quot;,&lt;br /&gt;
	toc_template_full = &amp;quot;Kana-categoryTOC/full&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true},&lt;br /&gt;
		&amp;quot;Category:Katakana script characters&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;historical katakana&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} historical [[katakana]].&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;&amp;#039;&amp;#039;See also&amp;#039;&amp;#039; [[:Category:{{{langname}}} historical hiragana]].&amp;quot;,&lt;br /&gt;
	toc_template = &amp;quot;Kana-categoryTOC&amp;quot;,&lt;br /&gt;
	toc_template_full = &amp;quot;Kana-categoryTOC/full&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;katakana&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true},&lt;br /&gt;
		&amp;quot;Category:Katakana script characters&amp;quot;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms spelled with mixed kana&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms which combine [[hiragana]] and [[katakana]] characters, potentially with [[kanji]] too.&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true},&lt;br /&gt;
		&amp;quot;hiragana&amp;quot;,&lt;br /&gt;
		&amp;quot;katakana&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;kanji&amp;quot;] = {&lt;br /&gt;
	topright = &amp;quot;{{wp|Kanji}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;{{{langname}}} symbols of the Han logographic script, which can represent sounds or convey meanings directly.&amp;quot;,&lt;br /&gt;
	toc_template = &amp;quot;Hani-categoryTOC&amp;quot;,&lt;br /&gt;
	umbrella = &amp;quot;Han characters&amp;quot;,&lt;br /&gt;
	parents = &amp;quot;logograms&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;kanji by reading&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} kanji categorized by reading.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;kanji&amp;quot;, sort = &amp;quot;reading&amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;makurakotoba&amp;quot;] = {&lt;br /&gt;
	topright = &amp;quot;{{wp|Makurakotoba}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;{{{langname}}} idioms used in poetry to introduce specific words.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;idioms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by kanji readings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} categories grouped with regard to the readings of the kanji with which they are spelled.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by reading pattern&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} categories with terms grouped by their reading patterns.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by number of kanji&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by number of kanji.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by orthographic property&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function handle_onyomi_list(category, category_type, cat_yomi_type)&lt;br /&gt;
	local onyomi, seen = {}, {}&lt;br /&gt;
	for _, yomi in pairs(yomi_data) do&lt;br /&gt;
		if not seen[yomi] and yomi.onyomi then&lt;br /&gt;
			local yomi_catname = yomi[category_type]&lt;br /&gt;
			if yomi_catname ~= false then&lt;br /&gt;
				local yomi_type = yomi.type&lt;br /&gt;
				if yomi_type ~= &amp;quot;on&amp;#039;yomi&amp;quot; and yomi_type ~= cat_yomi_type then&lt;br /&gt;
					insert(onyomi, &amp;quot;[[:Category:{{{langname}}} &amp;quot; .. category:gsub(&amp;quot;{{{yomi_catname}}}&amp;quot;, yomi_catname) .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		seen[yomi] = true&lt;br /&gt;
	end&lt;br /&gt;
	sort(onyomi)&lt;br /&gt;
	return onyomi&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function add_yomi_category(category, category_type, parent, description)&lt;br /&gt;
	for _, yomi in pairs(yomi_data) do&lt;br /&gt;
		local yomi_catname = yomi[category_type]&lt;br /&gt;
		if yomi_catname ~= false then&lt;br /&gt;
			local yomi_type = yomi.type&lt;br /&gt;
			local yomi_desc = yomi.link or yomi_catname&lt;br /&gt;
			if yomi.description then&lt;br /&gt;
				yomi_desc = yomi_desc .. &amp;quot;; &amp;quot; .. yomi.description&lt;br /&gt;
			end&lt;br /&gt;
			local label = {&lt;br /&gt;
				description = description .. &amp;quot; &amp;quot; .. yomi_desc .. &amp;quot;.&amp;quot;,&lt;br /&gt;
				breadcrumb = yomi_type,&lt;br /&gt;
				parents = {{name = parent, sort = yomi_catname}},&lt;br /&gt;
			}&lt;br /&gt;
			if yomi.onyomi then&lt;br /&gt;
				local onyomi = handle_onyomi_list(category, category_type, yomi_type)&lt;br /&gt;
				&lt;br /&gt;
				label.additional = &amp;quot;Categories of terms with &amp;quot; ..&lt;br /&gt;
					(yomi_type == &amp;quot;on&amp;#039;yomi&amp;quot; and &amp;quot;more&amp;quot; or &amp;quot;other&amp;quot;) ..&lt;br /&gt;
					&amp;quot; specific types of on&amp;#039;yomi readings can be found in the following categories:\n* &amp;quot; .. concat(onyomi, &amp;quot;\n* &amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
				if yomi_type ~= &amp;quot;on&amp;#039;yomi&amp;quot; then&lt;br /&gt;
					insert(label.parents, 1, {&lt;br /&gt;
						name = (category:gsub(&amp;quot;{{{yomi_catname}}}&amp;quot;, yomi_data.on[category_type])),&lt;br /&gt;
						sort = yomi_catname&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			labels[category:gsub(&amp;quot;{{{yomi_catname}}}&amp;quot;, yomi_catname)] = label&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
add_yomi_category(&lt;br /&gt;
	&amp;quot;terms read with {{{yomi_catname}}}&amp;quot;,&lt;br /&gt;
	&amp;quot;reading_category&amp;quot;,&lt;br /&gt;
	&amp;quot;terms by reading pattern&amp;quot;,&lt;br /&gt;
	&amp;quot;{{{langname}}} terms read with&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
add_yomi_category(&lt;br /&gt;
	&amp;quot;terms spelled with kanji with {{{yomi_catname}}} readings&amp;quot;,&lt;br /&gt;
	&amp;quot;kanji_category&amp;quot;,&lt;br /&gt;
	&amp;quot;terms by kanji reading type&amp;quot;,&lt;br /&gt;
	&amp;quot;{{{langname}}} categories with terms that are spelled with one or more kanji read with&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with missing yomi&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms where at least one [[Appendix:Japanese glossary#yomi|yomi]] is missing from {{tl|{{{langcode}}}-kanjitab}}.&amp;quot;,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;entry maintenance&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with IPA pronunciation with pitch accent&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with pronunciations that have {{w|Japanese pitch accent|pitch accent}} specified.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Pitch accent can be specified in {{tl|{{{langcode}}}-pron}} with the {{code|=acc=}} parameter.&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;entry maintenance&amp;quot;, &amp;quot;pitch accent&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with IPA pronunciation missing pitch accent&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with pronunciations that do not have a {{w|Japanese pitch accent|pitch accent}} specified.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Pitch accent can be specified in {{tl|{{{langcode}}}-pron}} with the {{code|=acc=}} parameter.&amp;quot;,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;entry maintenance&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pitch accent&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms regarding {{w|Japanese pitch accent|pitch accent}} pronunciation.&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with Heiban pitch accent (Tōkyō)&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with pronunciations that are (Tōkyō) [[平板型|Heiban]] {{w|Japanese pitch accent|pitch accent}}.&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;pitch accent&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with Atamadaka pitch accent (Tōkyō)&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with pronunciations that are (Tōkyō) [[頭高型|Atamadaka]] {{w|Japanese pitch accent|pitch accent}}.&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;pitch accent&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with Nakadaka pitch accent (Tōkyō)&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with pronunciations that are (Tōkyō) [[中高型|Nakadaka]] {{w|Japanese pitch accent|pitch accent}}.&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;pitch accent&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with Odaka pitch accent (Tōkyō)&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with pronunciations that are (Tōkyō) [[尾高型|Odaka]] {{w|Japanese pitch accent|pitch accent}}.&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;pitch accent&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with complex pitch accent (Tōkyō)&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with pronunciations that are (Tōkyō) complex {{w|Japanese pitch accent|pitch accent}}, as in having more than one {{m|ja|アクセント句}}.&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;pitch accent&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;pitch accent deaccenting before の&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with {{w|Japanese pitch accent|pitch accent}} pronunciations that have exceptional deaccenting or lack thereof before の ({{ja-deaccenting-before-no}}).&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;pitch accent&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with Odaka pitch accent not deaccented before の (Tōkyō)&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{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}}).&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;pitch accent deaccenting before の&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with Nakadaka pitch accent deaccented before の (Tōkyō)&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with pronunciations that are (Tōkyō) [[中高型|Nakadaka]] {{w|Japanese pitch accent|pitch accent}} and become deaccented before の ({{ja-deaccenting-before-no}}).&amp;quot;,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;pitch accent deaccenting before の&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by kanji reading type&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} categories with terms grouped with regard to the types of readings of the kanji with which &amp;quot; ..&lt;br /&gt;
	&amp;quot;they are spelled; broadly, those of Chinese origin, {{ja-r|音|おん}} readings, and those of non-Chinese origin, {{ja-r|訓|くん}} readings.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms spelled with ateji&amp;quot;] = {&lt;br /&gt;
	topright = &amp;quot;{{wp|Ateji}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;{{{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).&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms spelled with daiyōji&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Japanese terms spelled using [[Appendix:Japanese glossary#daiyouji|daiyōji]], categorized using {{temp|ja-daiyouji}}.&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;terms by etymology&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms spelled with jukujikun&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{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.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function add_grade_categories(grade, desc, wp, only_one, parent, sort)&lt;br /&gt;
	local grade_kanji = grade .. &amp;quot; kanji&amp;quot;&lt;br /&gt;
	local topright = wp and (&amp;quot;{{wp|%s}}&amp;quot;):format(ucfirst(grade_kanji)) or nil&lt;br /&gt;
	&lt;br /&gt;
	labels[grade_kanji] = {&lt;br /&gt;
		topright = topright,&lt;br /&gt;
		description = &amp;quot;{{{langname}}} kanji &amp;quot; .. desc,&lt;br /&gt;
		toc_template = &amp;quot;Hani-categoryTOC&amp;quot;,&lt;br /&gt;
		parents = {{&lt;br /&gt;
			name = parent and (parent .. &amp;quot; kanji&amp;quot;) or &amp;quot;kanji&amp;quot;,&lt;br /&gt;
			sort = sort or grade&lt;br /&gt;
		}},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	labels[&amp;quot;terms spelled with &amp;quot; .. grade_kanji] = {&lt;br /&gt;
		topright = topright,&lt;br /&gt;
		description = &amp;quot;{{{langname}}} terms spelled with &amp;quot; .. (only_one and &amp;quot;at least one &amp;quot; or &amp;quot;&amp;quot;) .. &amp;quot;kanji &amp;quot; .. desc,&lt;br /&gt;
		parents = {{&lt;br /&gt;
			name = parent and (&amp;quot;terms spelled with &amp;quot; .. parent .. &amp;quot; kanji&amp;quot;) or &amp;quot;terms by orthographic property&amp;quot;,&lt;br /&gt;
			sort = sort or grade&lt;br /&gt;
		}},&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for i = 1, 6 do&lt;br /&gt;
	local ord = m_numeric.ones_position_ord[i]&lt;br /&gt;
	add_grade_categories(&lt;br /&gt;
		ord .. &amp;quot; grade&amp;quot;,&lt;br /&gt;
		&amp;quot;taught in the &amp;quot; .. ord .. &amp;quot; grade of elementary school, as designated by the the official list of {{ja-r|教%育 漢%字|きょう%いく かん%じ|education kanji}}.&amp;quot;,&lt;br /&gt;
		false,&lt;br /&gt;
		false,&lt;br /&gt;
		&amp;quot;kyōiku&amp;quot;,&lt;br /&gt;
		i&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
add_grade_categories(&lt;br /&gt;
	&amp;quot;kyōiku&amp;quot;,&lt;br /&gt;
	&amp;quot;on the official list of {{ja-r|教%育 漢%字|きょう%いく かん%じ|education kanji}}.&amp;quot;,&lt;br /&gt;
	true,&lt;br /&gt;
	false,&lt;br /&gt;
	&amp;quot;jōyō&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
add_grade_categories(&lt;br /&gt;
	&amp;quot;secondary school&amp;quot;,&lt;br /&gt;
	&amp;quot;on the official list of {{ja-r|常%用 漢%字|じょう%よう かん%じ|regular-use characters}} that are generally taught in secondary school.&amp;quot;,&lt;br /&gt;
	false,&lt;br /&gt;
	false,&lt;br /&gt;
	&amp;quot;jōyō&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
add_grade_categories(&lt;br /&gt;
	&amp;quot;jōyō&amp;quot;,&lt;br /&gt;
	&amp;quot;on the official list of {{ja-r|常%用 漢%字|じょう%よう かん%じ|regular-use characters}}.&amp;quot;,&lt;br /&gt;
	true,&lt;br /&gt;
	false&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
add_grade_categories(&lt;br /&gt;
	&amp;quot;tōyō&amp;quot;,&lt;br /&gt;
	&amp;quot;on the official list of {{ja-r|当%用 漢%字|とう%よう かん%じ|general-use characters}}, which was used from 1946{{ndash}}1981 until the publication of the list of {{ja-r|常%用 漢%字|じょう%よう かん%じ|regular-use characters}}.&amp;quot;,&lt;br /&gt;
	true,&lt;br /&gt;
	false&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
add_grade_categories(&lt;br /&gt;
	&amp;quot;jinmeiyō&amp;quot;,&lt;br /&gt;
	&amp;quot;on the official list of {{ja-r|人%名%用 漢%字|じん%めい%-よう かん%じ|kanji for use in personal names}}.&amp;quot;,&lt;br /&gt;
	true,&lt;br /&gt;
	true&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
add_grade_categories(&lt;br /&gt;
	&amp;quot;hyōgai&amp;quot;,&lt;br /&gt;
	&amp;quot;not included on the official list of {{ja-r|常%用 漢%字|じょう%よう かん%じ|regular-use characters}} or {{ja-r|人%名%用 漢%字|じん%めい%-よう かん%じ|kanji for use in personal names}}, known as {{ja-r|表%外 漢%字|ひょう%がい かん%じ}} or {{ja-r|表%外%字|ひょう%がい%じ|unlisted characters}}.&amp;quot;,&lt;br /&gt;
	true,&lt;br /&gt;
	true&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms with multiple readings&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms with multiple pronunciations (hence multiple [[kana]] spellings).&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;kanji readings by number of morae&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} categories grouped with regard to the number of morae in their kanji readings.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;{{{langcat}}}&amp;quot;, raw = true}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;single-kanji terms&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms written as a single kanji.&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;terms by orthographic property&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;terms with 1 kanji&amp;quot;, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;kanji with kun readings missing okurigana designation&amp;quot;] = {&lt;br /&gt;
	breadcrumb = &amp;quot;Kanji missing okurigana designation&amp;quot;,&lt;br /&gt;
	description = &amp;quot;{{{langname}}} kanji entries in which one or more kun readings entered into {{tl|{{{langcode}}}-readings}} is missing a hyphen denoting okurigana.&amp;quot;,&lt;br /&gt;
	toc_template = &amp;quot;Hani-categoryTOC&amp;quot;,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;entry maintenance&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;terms by the individual characters in their historical spellings&amp;quot;] = {&lt;br /&gt;
	breadcrumb = &amp;quot;Historical&amp;quot;,&lt;br /&gt;
	description = &amp;quot;{{{langname}}} terms categorized by whether their spellings in the {{w|historical kana orthography}} included certain individual characters.&amp;quot;,&lt;br /&gt;
	parents = {{name = &amp;quot;terms by their individual characters&amp;quot;, sort = &amp;quot; &amp;quot;}},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;verbs without transitivity&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;{{{langname}}} verbs missing the {{code|=tr=}} parameter from their headword templates.&amp;quot;,&lt;br /&gt;
	hidden = true,&lt;br /&gt;
	can_be_empty = true,&lt;br /&gt;
	parents = {&amp;quot;entry maintenance&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
labels[&amp;quot;yojijukugo&amp;quot;] = {&lt;br /&gt;
	topright = &amp;quot;{{wp|Yojijukugo}}&amp;quot;,&lt;br /&gt;
	description = &amp;quot;{{{langname}}} four-[[kanji]] compound terms, {{ja-r|四%字 熟%語|よ%じ じゅく%ご}}, with idiomatic meanings; typically derived from Classical Chinese, Buddhist scripture or traditional Japanese proverbs.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;Compare Chinese {{w|chengyu}} and Korean {{w|sajaseong-eo}}.&amp;quot;,&lt;br /&gt;
	umbrella = &amp;quot;four-character idioms&amp;quot;,&lt;br /&gt;
	parents = {&amp;quot;idioms&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- FIXME: Only works for 0 through 19.&lt;br /&gt;
local word_to_number = {}&lt;br /&gt;
for k, v in pairs(m_numeric.ones_position) do&lt;br /&gt;
	word_to_number[v] = k&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local periods = {&lt;br /&gt;
	historical = true,&lt;br /&gt;
	ancient = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function get_period_text_and_reading_type_link(period, reading_type)&lt;br /&gt;
	if period and not periods[period] then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local period_text = period and period .. &amp;quot; &amp;quot; or nil&lt;br /&gt;
&lt;br /&gt;
	-- Allow periods (historical or ancient) by themselves; they will parse as reading types.&lt;br /&gt;
	if not period and periods[reading_type] then&lt;br /&gt;
		return nil, reading_type&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local reading_type_link = &amp;quot;[[Appendix:Japanese glossary#&amp;quot; .. reading_type .. &amp;quot;|&amp;quot; .. reading_type .. &amp;quot;]]&amp;quot;&lt;br /&gt;
	return period_text, reading_type_link&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_sc(str)&lt;br /&gt;
	return match(str:gsub(&amp;quot;[%s%p]+&amp;quot;, &amp;quot;&amp;quot;), &amp;quot;[^&amp;quot; .. Hira:getCharacters() .. &amp;quot;]&amp;quot;) and Jpan or Hira&lt;br /&gt;
end&lt;br /&gt;
		&lt;br /&gt;
local function get_tagged_reading(reading, lang)&lt;br /&gt;
	return tag_text(reading, lang, get_sc(reading))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_reading_link(reading, lang, period, link)&lt;br /&gt;
	local hist = periods[period]&lt;br /&gt;
	reading = reading:gsub(&amp;quot;[%.%-%s]+&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	return full_link({&lt;br /&gt;
		lang = lang,&lt;br /&gt;
		sc = get_sc(reading),&lt;br /&gt;
		term = link or reading:gsub(&amp;quot;・&amp;quot;, &amp;quot;&amp;quot;),&lt;br /&gt;
		-- If we have okurigana, demarcate furigana.&lt;br /&gt;
		alt = reading:gsub(&amp;quot;^(.-)・&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;border-top:1px solid;position:relative;padding:1px;\&amp;quot;&amp;gt;%1&amp;lt;span style=\&amp;quot;position:absolute;top:0;bottom:67%%;right:0%%;border-right:1px solid;\&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;),&lt;br /&gt;
		tr = kana_to_romaji((reading:gsub(&amp;quot;・&amp;quot;, &amp;quot;.&amp;quot;)), lang:getCode(), nil, {keep_dot = true, hist = hist})&lt;br /&gt;
			:gsub(&amp;quot;^(.-)%.&amp;quot;, &amp;quot;&amp;lt;u&amp;gt;%1&amp;lt;/u&amp;gt;&amp;quot;),&lt;br /&gt;
		pos = reading:find(&amp;quot;・&amp;quot;, 1, true) and get_tagged_reading((reading:gsub(&amp;quot;^.-・&amp;quot;, &amp;quot;～&amp;quot;)), lang) or nil&lt;br /&gt;
	}, &amp;quot;term&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function is_on_subtype(reading_type)&lt;br /&gt;
	return reading_type:find(&amp;quot;.on$&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local n =data.label:match(&amp;quot;^terms with ([1-9]%d*) kanji$&amp;quot;)&lt;br /&gt;
	if not n then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local sortkey = require(&amp;quot;Module:category tree&amp;quot;).numeral_sortkey(n, 2097152)&lt;br /&gt;
	return {&lt;br /&gt;
		breadcrumb = n,&lt;br /&gt;
		description = (&amp;quot;{{{langname}}} terms containing exactly %d kanji.&amp;quot;):format(n),&lt;br /&gt;
		-- TODO: implement this using the same mechanism used to implement parents (i.e. avoiding the need for raw categories).&lt;br /&gt;
--		umbrella = {&lt;br /&gt;
--			breadcrumb = (&amp;quot;%d kanji&amp;quot;):format(n),&lt;br /&gt;
--			parents = {{name = &amp;quot;terms by number of kanji subcategories by language&amp;quot;, sort = sortkey}},&lt;br /&gt;
--		},&lt;br /&gt;
		parents = {{name = (&amp;quot;terms by number of kanji&amp;quot;), sort = sortkey}}&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local label_pref, kana = data.label:match(&amp;quot;^(terms historically spelled with )&amp;quot; .. kana_capture .. &amp;quot;$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not kana then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local lang = data.lang&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} terms spelled with &amp;quot; .. get_reading_link(kana, lang, &amp;quot;historical&amp;quot;) .. &amp;quot; in the {{w|historical kana orthography}}.&amp;quot;,&lt;br /&gt;
		displaytitle = &amp;quot;{{{langname}}} &amp;quot; .. label_pref .. get_tagged_reading(kana, lang),&lt;br /&gt;
		breadcrumb = &amp;quot;historical&amp;quot;,&lt;br /&gt;
		parents = {&lt;br /&gt;
			{name = &amp;quot;terms spelled with &amp;quot; .. kana, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
			{name = &amp;quot;terms by the individual characters in their historical spellings&amp;quot;, sort = lang:makeSortKey(kana)}&lt;br /&gt;
		},&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local count, plural = data.label:match(&amp;quot;^kanji readings with (.+) mora(e?)$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- Make sure &amp;#039;one&amp;#039; goes with singular and other numbers with plural.&lt;br /&gt;
	if not count or (count == &amp;quot;one&amp;quot;) ~= (plural == &amp;quot;&amp;quot;) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local num = word_to_number[count]&lt;br /&gt;
	if not num then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} kanji readings containing &amp;quot; .. count .. &amp;quot; mora&amp;quot; .. plural .. &amp;quot;.&amp;quot;,&lt;br /&gt;
		breadcrumb = num,&lt;br /&gt;
		parents = {{name = &amp;quot;kanji readings by number of morae&amp;quot;, sort = num}},&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local label_pref, period, reading_type, reading = match(data.label, &amp;quot;^(kanji with ([a-z]-) ?([%a&amp;#039;]+) reading )&amp;quot; .. kana_capture .. &amp;quot;$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not period then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	period = period ~= &amp;quot;&amp;quot; and period or nil&lt;br /&gt;
	local period_text, reading_type_link = get_period_text_and_reading_type_link(period, reading_type)&lt;br /&gt;
	&lt;br /&gt;
	if not reading_type_link then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local lang = data.lang&lt;br /&gt;
	&lt;br /&gt;
	-- Compute parents.&lt;br /&gt;
	local parents, breadcrumb = {}&lt;br /&gt;
	if reading:find(&amp;quot;・&amp;quot;, 1, true) then&lt;br /&gt;
		local okurigana = reading:match(&amp;quot;・(.*)&amp;quot;)&lt;br /&gt;
		insert(parents, {&lt;br /&gt;
			name = &amp;quot;kanji with &amp;quot; .. (period_text or &amp;quot;&amp;quot;) .. reading_type .. &amp;quot; reading &amp;quot; .. reading:match(&amp;quot;(.-)・&amp;quot;),&lt;br /&gt;
			-- Sort by okurigana, since all coordinate categories will have the same furigana.&lt;br /&gt;
			sort = (lang:makeSortKey(okurigana))&lt;br /&gt;
		})&lt;br /&gt;
		breadcrumb = &amp;quot;～&amp;quot; .. okurigana&lt;br /&gt;
	else&lt;br /&gt;
		insert(parents, {&lt;br /&gt;
			name = &amp;quot;kanji by &amp;quot; .. (period_text or &amp;quot;&amp;quot;) .. reading_type .. &amp;quot; reading&amp;quot;,&lt;br /&gt;
			sort = (lang:makeSortKey(reading))&lt;br /&gt;
		})&lt;br /&gt;
		breadcrumb = reading&lt;br /&gt;
	end&lt;br /&gt;
	if is_on_subtype(reading_type) then&lt;br /&gt;
		insert(parents, {name = &amp;quot;kanji with &amp;quot; .. (period_text or &amp;quot;&amp;quot;) .. &amp;quot;on reading &amp;quot; .. reading, sort = reading_type})&lt;br /&gt;
	elseif period_text then&lt;br /&gt;
		insert(parents, {name = &amp;quot;kanji with &amp;quot; .. period_text .. &amp;quot;reading &amp;quot; .. reading, sort = reading_type})&lt;br /&gt;
	end&lt;br /&gt;
	if not period_text then&lt;br /&gt;
		insert(parents, {name = &amp;quot;kanji read as &amp;quot; .. reading, sort = reading_type})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} [[kanji]] with the &amp;quot; .. (period_text or &amp;quot;&amp;quot;) .. reading_type_link .. &amp;quot; reading &amp;quot; ..&lt;br /&gt;
			get_reading_link(reading, lang, period or reading_type) .. &amp;quot;.&amp;quot;,&lt;br /&gt;
		displaytitle = &amp;quot;{{{langname}}} &amp;quot; .. label_pref .. get_tagged_reading(reading, lang),&lt;br /&gt;
		breadcrumb = get_tagged_reading(breadcrumb, lang),&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local period, reading_type = match(data.label, &amp;quot;^kanji by ([a-z]-) ?([%a&amp;#039;]+) reading$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not period then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	period = period ~= &amp;quot;&amp;quot; and period or nil&lt;br /&gt;
	local period_text, reading_type_link = get_period_text_and_reading_type_link(period, reading_type)&lt;br /&gt;
	&lt;br /&gt;
	if not reading_type_link then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compute parents.&lt;br /&gt;
	local parents = {&lt;br /&gt;
		is_on_subtype(reading_type) and {name = &amp;quot;kanji by &amp;quot; .. (period_text or &amp;quot;&amp;quot;) .. &amp;quot;on reading&amp;quot;, sort = reading_type} or&lt;br /&gt;
		period_text and {name = &amp;quot;kanji by &amp;quot; .. reading_type .. &amp;quot; reading&amp;quot;, sort = period} or&lt;br /&gt;
		{name = &amp;quot;kanji by reading&amp;quot;, sort = reading_type}&lt;br /&gt;
	}&lt;br /&gt;
	if period_text then&lt;br /&gt;
		insert(parents, {name = &amp;quot;kanji by &amp;quot; .. period_text .. &amp;quot;reading&amp;quot;, sort = reading_type})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compute description.&lt;br /&gt;
	local description = &amp;quot;{{{langname}}} [[kanji]] categorized by &amp;quot; .. (period_text or &amp;quot;&amp;quot;) .. reading_type_link .. &amp;quot; reading.&amp;quot;&lt;br /&gt;
	return {&lt;br /&gt;
		description = description,&lt;br /&gt;
		breadcrumb = (period_text or &amp;quot;&amp;quot;) .. reading_type,&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local label_pref, reading = match(data.label, &amp;quot;^(kanji read as )&amp;quot; .. kana_capture .. &amp;quot;$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not reading then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(data.args, {&lt;br /&gt;
		[&amp;quot;histconsol&amp;quot;] = true,&lt;br /&gt;
	})&lt;br /&gt;
	local lang = data.lang&lt;br /&gt;
	&lt;br /&gt;
	local parents, breadcrumb = {}&lt;br /&gt;
	if reading:find(&amp;quot;・&amp;quot;, 1, true) then&lt;br /&gt;
		local okurigana = reading:match(&amp;quot;・(.*)&amp;quot;)&lt;br /&gt;
		insert(parents, {&lt;br /&gt;
			name = &amp;quot;kanji read as &amp;quot; .. reading:match(&amp;quot;(.-)・&amp;quot;),&lt;br /&gt;
			-- Sort by okurigana, since all coordinate categories will have the same furigana.&lt;br /&gt;
			sort = (lang:makeSortKey(okurigana))&lt;br /&gt;
		})&lt;br /&gt;
		breadcrumb = &amp;quot;～&amp;quot; .. okurigana&lt;br /&gt;
	else&lt;br /&gt;
		insert(parents, {&lt;br /&gt;
			name = &amp;quot;kanji by reading&amp;quot;,&lt;br /&gt;
			sort = (lang:makeSortKey(reading))&lt;br /&gt;
		})&lt;br /&gt;
		breadcrumb = reading&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local addl&lt;br /&gt;
	local period_text&lt;br /&gt;
	if args.histconsol then&lt;br /&gt;
		period_text = &amp;quot;historical&amp;quot;&lt;br /&gt;
		addl = (&amp;quot;This is a [[Wikipedia:Historical kana orthography|historical]] [[Wikipedia:Kanazukai|reading]], now &amp;quot; ..&lt;br /&gt;
		&amp;quot;consolidated with the [[Wikipedia:Modern kana usage|modern reading]] of &amp;quot; ..&lt;br /&gt;
		get_reading_link(args.histconsol, lang, nil, (&amp;quot;Category:Japanese kanji read as %s&amp;quot;):format(args.histconsol)) .. &amp;quot;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} [[kanji]] read as &amp;quot; .. get_reading_link(reading, lang, period_text) .. &amp;quot;.&amp;quot;,&lt;br /&gt;
		additional = addl,&lt;br /&gt;
		displaytitle = &amp;quot;{{{langname}}} &amp;quot; .. label_pref .. get_tagged_reading(reading, lang),&lt;br /&gt;
		breadcrumb = get_tagged_reading(breadcrumb, lang),&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local label_pref, reading = match(data.label, &amp;quot;^(terms spelled with kanji read as )&amp;quot; .. kana_capture .. &amp;quot;$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not reading then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Compute parents.&lt;br /&gt;
	local lang = data.lang&lt;br /&gt;
	local sort_key = (lang:makeSortKey(reading))&lt;br /&gt;
	local mora_count = require(&amp;quot;Module:ja&amp;quot;).count_morae(reading)&lt;br /&gt;
	local mora_count_words = m_numeric.spell_number(tostring(mora_count))&lt;br /&gt;
	local parents = {&lt;br /&gt;
		{name = &amp;quot;terms by kanji readings&amp;quot;, sort = sort_key},&lt;br /&gt;
		{name = &amp;quot;kanji readings with &amp;quot; .. mora_count_words .. &amp;quot; mora&amp;quot; .. (mora_count &amp;gt; 1 and &amp;quot;e&amp;quot; or &amp;quot;&amp;quot;), sort = sort_key},&lt;br /&gt;
		{name = &amp;quot;kanji read as &amp;quot; .. reading, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local tagged_reading = get_tagged_reading(reading, lang)&lt;br /&gt;
	return {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} terms that contain kanji that exhibit a reading of &amp;quot; .. get_reading_link(reading, lang) ..&lt;br /&gt;
		&amp;quot; in those terms prior to any sound changes.&amp;quot;,&lt;br /&gt;
		displaytitle = &amp;quot;{{{langname}}} &amp;quot; .. label_pref .. tagged_reading,&lt;br /&gt;
		breadcrumb = tagged_reading,&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local kanji, reading = match(data.label, &amp;quot;^terms spelled with (.) read as &amp;quot; .. kana_capture .. &amp;quot;$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not kanji then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(data.args, {&lt;br /&gt;
		[1] = {list = true},&lt;br /&gt;
	})&lt;br /&gt;
	local lang = data.lang&lt;br /&gt;
	&lt;br /&gt;
	if #args[1] == 0 then&lt;br /&gt;
		error(&amp;quot;For categories of the form \&amp;quot;&amp;quot; .. lang:getCanonicalName() ..&lt;br /&gt;
			&amp;quot; terms spelled with KANJI read as READING\&amp;quot;, at least one reading type (e.g. &amp;lt;code&amp;gt;kun&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;) must be specified using &amp;lt;code&amp;gt;1=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3=&amp;lt;/code&amp;gt;, etc.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	local yomi_types, parents = {}, {}&lt;br /&gt;
	for _, yomi, category in ipairs(args[1]) do&lt;br /&gt;
		local yomi_data = yomi_data[yomi]&lt;br /&gt;
		if not yomi_data then&lt;br /&gt;
			error(&amp;quot;The yomi type \&amp;quot;&amp;quot; .. yomi .. &amp;quot;\&amp;quot; is not recognized.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		category = yomi_data.kanji_category&lt;br /&gt;
		if not category then&lt;br /&gt;
			error(&amp;quot;The yomi type \&amp;quot;&amp;quot; .. yomi .. &amp;quot;\&amp;quot; is not valid for this type of category.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		insert(yomi_types, yomi_data.link)&lt;br /&gt;
		insert(parents, {&lt;br /&gt;
			name = &amp;quot;terms spelled with kanji with &amp;quot; .. category .. &amp;quot; readings&amp;quot;,&lt;br /&gt;
			sort = (lang:makeSortKey(reading))&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	insert(parents, 1, {name = &amp;quot;terms spelled with &amp;quot; .. kanji, sort = (lang:makeSortKey(reading))})&lt;br /&gt;
	insert(parents, 2, {name = &amp;quot;terms spelled with kanji read as &amp;quot; .. reading, sort = Hani_sort(kanji)})&lt;br /&gt;
	&lt;br /&gt;
	yomi_types = (#yomi_types &amp;gt; 1 and &amp;quot;one of &amp;quot; or &amp;quot;&amp;quot;) .. &amp;quot;its &amp;quot; ..&lt;br /&gt;
		require(&amp;quot;Module:table&amp;quot;).serialCommaJoin(yomi_types, {conj = &amp;quot;or&amp;quot;}) ..&lt;br /&gt;
		&amp;quot; reading&amp;quot; .. (#yomi_types &amp;gt; 1 and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local tagged_kanji = get_tagged_reading(kanji, lang)&lt;br /&gt;
	local tagged_reading = get_tagged_reading(reading, lang)&lt;br /&gt;
	return {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} terms spelled with {{l|{{{langcode}}}|&amp;quot; .. kanji .. &amp;quot;}} with &amp;quot; ..&lt;br /&gt;
			yomi_types .. &amp;quot; of &amp;quot; .. get_reading_link(reading, lang) .. &amp;quot;.&amp;quot;,&lt;br /&gt;
		displaytitle = &amp;quot;{{{langname}}} terms spelled with &amp;quot; .. tagged_kanji .. &amp;quot; read as &amp;quot; .. tagged_reading,&lt;br /&gt;
		breadcrumb = &amp;quot;read as &amp;quot; .. tagged_reading,&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local affix, kanji, reading = data.label:match(&amp;quot;^terms ([a-z]+fix)ed with (.+) read as &amp;quot;  .. kana_capture .. &amp;quot;$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not affix or not kanji or not reading then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(data.args, {&lt;br /&gt;
		[1] = {list = true},&lt;br /&gt;
	})&lt;br /&gt;
	local lang = data.lang&lt;br /&gt;
	&lt;br /&gt;
	if #args[1] == 0 then&lt;br /&gt;
		error(&amp;quot;For categories of the form \&amp;quot;&amp;quot; .. lang:getCanonicalName() ..&lt;br /&gt;
			&amp;quot; terms AFFIXed with KANJI read as READING\&amp;quot;, at least one reading type (e.g. &amp;lt;code&amp;gt;kun&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;) must be specified using &amp;lt;code&amp;gt;1=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3=&amp;lt;/code&amp;gt;, etc.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	local yomi_types = {}&lt;br /&gt;
	for _, yomi, category in ipairs(args[1]) do&lt;br /&gt;
		local yomi_data = yomi_data[yomi]&lt;br /&gt;
		if not yomi_data then&lt;br /&gt;
			error(&amp;quot;The yomi type \&amp;quot;&amp;quot; .. yomi .. &amp;quot;\&amp;quot; is not recognized.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		category = yomi_data.kanji_category&lt;br /&gt;
		if not category then&lt;br /&gt;
			error(&amp;quot;The yomi type \&amp;quot;&amp;quot; .. yomi .. &amp;quot;\&amp;quot; is not valid for this type of category.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		insert(yomi_types, yomi_data.link)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	yomi_types = (#yomi_types &amp;gt; 1 and &amp;quot;one of &amp;quot; or &amp;quot;&amp;quot;) .. &amp;quot;its &amp;quot; ..&lt;br /&gt;
		require(&amp;quot;Module:table&amp;quot;).serialCommaJoin(yomi_types, {conj = &amp;quot;or&amp;quot;}) ..&lt;br /&gt;
		&amp;quot; reading&amp;quot; .. (#yomi_types &amp;gt; 1 and &amp;quot;s&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local description = &amp;quot;{{{langname}}} terms &amp;quot; .. affix .. &amp;quot;ed with {{l|{{{langcode}}}|&amp;quot; .. kanji .. &amp;quot;}} with &amp;quot; ..&lt;br /&gt;
			yomi_types .. &amp;quot; of &amp;quot; .. get_reading_link(reading, lang) .. &amp;quot;.&amp;quot;&lt;br /&gt;
	local what_categorizes_msg =&lt;br /&gt;
		require(&amp;quot;Module:category tree/fam/jpx/what-categorizes-msg&amp;quot;)&lt;br /&gt;
		.get_what_categorizes_msg(kanji, reading, affix)&lt;br /&gt;
	if what_categorizes_msg then&lt;br /&gt;
		description = description .. &amp;quot;\n\n&amp;quot; .. what_categorizes_msg&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local parents = {}&lt;br /&gt;
	table.insert(parents, {name = &amp;quot;terms &amp;quot; .. affix .. &amp;quot;ed with &amp;quot; .. kanji, sort = (lang:makeSortKey(reading))})&lt;br /&gt;
	if mw.title.new(&amp;quot;Category:&amp;quot; .. lang:getCanonicalName() .. &amp;quot; terms spelled with &amp;quot; .. kanji .. &amp;quot; read as &amp;quot; .. reading).exists then&lt;br /&gt;
		table.insert(parents, {name = &amp;quot;terms spelled with &amp;quot; .. kanji .. &amp;quot; read as &amp;quot; .. reading, sort = (lang:makeSortKey(reading)), args=data.args})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local tagged_kanji = get_tagged_reading(kanji, lang)&lt;br /&gt;
	local tagged_reading = get_tagged_reading(reading, lang)&lt;br /&gt;
	return {&lt;br /&gt;
		description = description,&lt;br /&gt;
		displaytitle = &amp;quot;{{{langname}}} terms &amp;quot; .. affix .. &amp;quot;ed with &amp;quot; .. tagged_kanji .. &amp;quot; read as &amp;quot; .. tagged_reading,&lt;br /&gt;
		breadcrumb = &amp;quot;read as &amp;quot; .. reading,&lt;br /&gt;
		parents = parents,&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
insert(handlers, function(data)&lt;br /&gt;
	local kanji, daiyoji = match(data.label, &amp;quot;^terms with (.) replaced by daiyōji (.)$&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	if not kanji then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(data.args, {&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = true,&lt;br /&gt;
	})&lt;br /&gt;
	local lang = data.lang&lt;br /&gt;
	&lt;br /&gt;
	if not args.sort then&lt;br /&gt;
		error(&amp;quot;For categories of the form \&amp;quot;&amp;quot; .. lang:getCanonicalName() ..&lt;br /&gt;
			&amp;quot; terms with KANJI replaced by daiyōji DAIYOJI\&amp;quot;, the sort key must be specified using sort=&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local tagged_kanji = get_tagged_reading(kanji, lang)&lt;br /&gt;
	local tagged_daiyoji = get_tagged_reading(daiyoji, lang)&lt;br /&gt;
	return {&lt;br /&gt;
		description = &amp;quot;{{{langname}}} terms with {{l|{{{langcode}}}|&amp;quot; .. kanji .. &amp;quot;}} replaced by [[Appendix:Japanese glossary#daiyouji|daiyōji]] {{l|{{{langcode}}}|&amp;quot; .. daiyoji .. &amp;quot;}}.&amp;quot;,&lt;br /&gt;
		displaytitle = &amp;quot;{{{langname}}} terms with &amp;quot; .. tagged_kanji .. &amp;quot; replaced by daiyōji &amp;quot; .. tagged_daiyoji,&lt;br /&gt;
		breadcrumb = tagged_kanji .. &amp;quot; replaced by daiyōji &amp;quot; .. tagged_daiyoji,&lt;br /&gt;
		parents = {{name = &amp;quot;terms spelled with daiyōji&amp;quot;, sort = args.sort}},&lt;br /&gt;
		umbrella = false,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
return {LABELS = labels, HANDLERS = handlers}&lt;/div&gt;</summary>
		<author><name>wikt&gt;Shlyst</name></author>
	</entry>
</feed>