<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ACategory_tree%2Fposcatboiler%2Fdata%2Fcharacters</id>
	<title>Module:Category tree/poscatboiler/data/characters - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://test.st34an.tech/index.php?action=history&amp;feed=atom&amp;title=Module%3ACategory_tree%2Fposcatboiler%2Fdata%2Fcharacters"/>
	<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/characters&amp;action=history"/>
	<updated>2026-04-10T17:36:30Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/characters&amp;diff=69&amp;oldid=prev</id>
		<title>Jsrs701: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/characters&amp;diff=69&amp;oldid=prev"/>
		<updated>2026-04-10T07:25:51Z</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;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:25, 10 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&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;!-- diff cache key mediawikidb:diff:1.41:old-68:rev-69 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jsrs701</name></author>
	</entry>
	<entry>
		<id>https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/characters&amp;diff=68&amp;oldid=prev</id>
		<title>bob&gt;Juelos: Reverted edits by Juelos (talk) to last revision by Djpwikiadmin</title>
		<link rel="alternate" type="text/html" href="https://test.st34an.tech/index.php?title=Module:Category_tree/poscatboiler/data/characters&amp;diff=68&amp;oldid=prev"/>
		<updated>2023-09-03T08:03:49Z</updated>

		<summary type="html">&lt;p&gt;Reverted edits by &lt;a href=&quot;/index.php?title=Special:Contributions/Juelos&quot; title=&quot;Special:Contributions/Juelos&quot;&gt;Juelos&lt;/a&gt; (&lt;a href=&quot;/index.php?title=User_talk:Juelos&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Juelos (page does not exist)&quot;&gt;talk&lt;/a&gt;) to last revision by &lt;a href=&quot;/index.php?title=User:Djpwikiadmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Djpwikiadmin (page does not exist)&quot;&gt;Djpwikiadmin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local raw_categories = {}&lt;br /&gt;
local handlers = {} &lt;br /&gt;
&lt;br /&gt;
local ulen = mw.ustring.len&lt;br /&gt;
local uupper = mw.ustring.upper&lt;br /&gt;
local ulower = mw.ustring.lower&lt;br /&gt;
local rfind = mw.ustring.find&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function track(page)&lt;br /&gt;
	require(&amp;quot;Module:debug/track&amp;quot;)(&amp;quot;poscatboiler-characters/&amp;quot; .. page)&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                              RAW CATEGORIES                             --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
raw_categories[&amp;quot;Terms by their individual characters subcategories by language&amp;quot;] = {&lt;br /&gt;
	description = &amp;quot;Umbrella categories covering terms categorized by unusual characters contained in them.&amp;quot;,&lt;br /&gt;
	additional = &amp;quot;{{{umbrella_meta_msg}}}&amp;quot;,&lt;br /&gt;
	parents = {&lt;br /&gt;
		&amp;quot;Umbrella metacategories&amp;quot;,&lt;br /&gt;
		{name = &amp;quot;terms by their individual characters&amp;quot;, is_label = true, sort = &amp;quot; &amp;quot;},&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
--                                                                         --&lt;br /&gt;
--                                 HANDLERS                                --&lt;br /&gt;
--                                                                         --&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- 	If char is a combining character, returns a version with a dotted circle before it.&lt;br /&gt;
function add_dotted_circle(char, combining)&lt;br /&gt;
	return combining and &amp;quot;◌&amp;quot; .. char or char&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
table.insert(handlers, function(data)&lt;br /&gt;
	-- NOTE: The &amp;quot;character&amp;quot; in the title may actually be a description such as&lt;br /&gt;
	-- &amp;quot;gershayim&amp;quot;. In that case, char= is specified as a parameter indicating the&lt;br /&gt;
	-- actual character.&lt;br /&gt;
	local titlechar = data.label:match(&amp;quot;^terms spelled with (.+)$&amp;quot;)&lt;br /&gt;
	if not titlechar then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local ja_ryu = data.lang and (data.lang:getFamilyCode() == &amp;quot;jpx&amp;quot; or data.lang:getFamilyCode() == &amp;quot;jpx-ryu&amp;quot;)&lt;br /&gt;
	-- If Japanese or Ryukyuan, only fire on a single kanji character.&lt;br /&gt;
	if ja_ryu and (titlechar:find(&amp;quot;[A-Za-z]&amp;quot;) or ulen(titlechar) &amp;gt; 1) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local params = {&lt;br /&gt;
		[&amp;quot;char&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;sort&amp;quot;] = {},&lt;br /&gt;
		-- Not sure what used to be done with the following parameters.&lt;br /&gt;
		[&amp;quot;context&amp;quot;] = {},&lt;br /&gt;
		[&amp;quot;context2&amp;quot;] = {},&lt;br /&gt;
	}&lt;br /&gt;
	local args = require(&amp;quot;Module:parameters&amp;quot;).process(data.args, params)&lt;br /&gt;
	if args.context or args.context2 then&lt;br /&gt;
		track(&amp;quot;terms-spelled-with-context&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if titlechar == &amp;quot;numbers&amp;quot; then&lt;br /&gt;
		local sortkey = args.sort or &amp;quot;#&amp;quot;&lt;br /&gt;
		return {&lt;br /&gt;
			description = &amp;quot;{{{langname}}} terms spelled with one or more numeric digits.&amp;quot;,&lt;br /&gt;
			parents = {{name = &amp;quot;terms by their individual characters&amp;quot;, sort = sortkey }},&lt;br /&gt;
			breadcrumb = &amp;quot;numbers&amp;quot;,&lt;br /&gt;
			umbrella = {&lt;br /&gt;
				breadcrumb = &amp;quot;numbers&amp;quot;,&lt;br /&gt;
				parents = {{name = &amp;quot;Terms by their individual characters subcategories by language&amp;quot;, sort = &amp;quot; &amp;quot; .. sortkey }}&lt;br /&gt;
			},&lt;br /&gt;
		}, true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local char = args.char or titlechar&lt;br /&gt;
	local titlechar_is_desc = args.char and args.char ~= titlechar&lt;br /&gt;
	if titlechar_is_desc then&lt;br /&gt;
		track(&amp;quot;titlechar_is_desc&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lang = data.lang or require(&amp;quot;Module:languages&amp;quot;).getByCode(&amp;quot;mul&amp;quot;)&lt;br /&gt;
	local combining = ulen(char) == 1 and require(&amp;quot;Module:Unicode_data&amp;quot;).is_combining(mw.ustring.codepoint(char))&lt;br /&gt;
	&lt;br /&gt;
	local specials = {[&amp;quot;ß&amp;quot;] = &amp;quot;ẞ&amp;quot;, [&amp;quot;ͅ&amp;quot;] = &amp;quot;ͅ&amp;quot;}&lt;br /&gt;
	local upper = mw.ustring.toNFD(char)&lt;br /&gt;
		:gsub(&amp;quot;[%z\1-\127\194-\244][\128-\191]*&amp;quot;, function(m)&lt;br /&gt;
			return specials[m] or mw.ustring.upper(m)&lt;br /&gt;
		end)&lt;br /&gt;
	upper = mw.ustring.toNFC(upper)&lt;br /&gt;
	&lt;br /&gt;
	if char ~= upper and ulen(char) == 1 then&lt;br /&gt;
		-- We want uppercase characters; but unless we&amp;#039;re careful, we run into an issue with&lt;br /&gt;
		-- [[Category:English terms spelled with ı]] due to the weird behavior of this character,&lt;br /&gt;
		-- which has standard I as its uppercase equivalent.&lt;br /&gt;
		local standard_chars = lang:getStandardCharacters()&lt;br /&gt;
		if data.lang and standard_chars then&lt;br /&gt;
			local function err()&lt;br /&gt;
				error(&amp;quot;Category titles should use uppercase characters: &amp;#039;&amp;quot; .. data.label .. &amp;quot;&amp;#039;&amp;quot;, 2)&lt;br /&gt;
			end&lt;br /&gt;
			if data.lang:getCode() ~= &amp;quot;lo&amp;quot; then&lt;br /&gt;
				if not rfind(standard_chars, upper) then&lt;br /&gt;
					err()&lt;br /&gt;
				end&lt;br /&gt;
			elseif not rfind(upper, &amp;quot;[&amp;quot; .. standard_chars .. &amp;quot;]&amp;quot;) then&lt;br /&gt;
				err()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Compute description.&lt;br /&gt;
	&lt;br /&gt;
	-- If the letter has a lowercase form, show it.&lt;br /&gt;
	local character = require(&amp;quot;Module:links&amp;quot;).full_link(&lt;br /&gt;
		{&lt;br /&gt;
			term = char,&lt;br /&gt;
			alt = combining and add_dotted_circle(char, true) or nil,&lt;br /&gt;
			lang = lang,&lt;br /&gt;
			tr = combining and &amp;quot;-&amp;quot; or nil,&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;term&amp;quot;&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	if ulower(char) ~= char then&lt;br /&gt;
		character = &amp;quot;upper case &amp;quot; .. character .. &amp;quot; or lower case &amp;quot; ..&lt;br /&gt;
			require(&amp;quot;Module:links&amp;quot;).full_link(&lt;br /&gt;
				{&lt;br /&gt;
					term = ulower(char),&lt;br /&gt;
					lang = lang&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;term&amp;quot;&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if titlechar_is_desc then&lt;br /&gt;
		character = character .. &amp;quot; (&amp;quot; .. titlechar .. &amp;quot;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local description = &amp;quot;{{{langname}}} terms spelled with &amp;quot; .. character .. &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	-- Set tagged character for displaytitle and breadcrumb.&lt;br /&gt;
	local tagged_titlechar = not titlechar_is_desc and&lt;br /&gt;
		require(&amp;quot;Module:script utilities&amp;quot;).tag_text(titlechar, lang, nil, &amp;quot;term&amp;quot;) or nil&lt;br /&gt;
	local tagged_char = titlechar_is_desc and titlechar or&lt;br /&gt;
		require(&amp;quot;Module:script utilities&amp;quot;).tag_text(add_dotted_circle(char, combining), lang, nil, &amp;quot;term&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- Compute sort key.&lt;br /&gt;
&lt;br /&gt;
	local sortkey =&lt;br /&gt;
		args.sort or&lt;br /&gt;
		(lang:makeSortKey(char))&lt;br /&gt;
	if sortkey == &amp;quot;&amp;quot; then&lt;br /&gt;
		sortkey = char&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		description = description,&lt;br /&gt;
		additional = &amp;quot;Note that categories of the form &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;LANG terms spelled with CHAR&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; are intended for characters not &amp;quot;&lt;br /&gt;
			.. &amp;quot;part of the standard repertoire of a language (e.g. Cyrillic characters in English or Latin characters in Russian).&amp;quot;,&lt;br /&gt;
		displaytitle = not titlechar_is_desc and &amp;quot;{{{langname}}} terms spelled with &amp;quot; .. tagged_titlechar or nil,&lt;br /&gt;
		parents = {{name = &amp;quot;terms by their individual characters&amp;quot;, sort = sortkey }},&lt;br /&gt;
		breadcrumb = tagged_char,&lt;br /&gt;
		umbrella = not ja_ryu and {&lt;br /&gt;
			displaytitle = not titlechar_is_desc and &amp;quot;Terms spelled with &amp;quot; .. tagged_titlechar .. &amp;quot; by language&amp;quot; or nil,&lt;br /&gt;
			breadcrumb = tagged_char,&lt;br /&gt;
			parents = {{name = &amp;quot;Terms by their individual characters subcategories by language&amp;quot;, sort = &amp;quot; &amp;quot; .. sortkey }}&lt;br /&gt;
		} or false,&lt;br /&gt;
	}, true&lt;br /&gt;
end)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return {RAW_CATEGORIES = raw_categories, HANDLERS = handlers}&lt;/div&gt;</summary>
		<author><name>bob&gt;Juelos</name></author>
	</entry>
</feed>