<?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%3Avi-sortkey</id>
	<title>Module:vi-sortkey - 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%3Avi-sortkey"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:vi-sortkey&amp;action=history"/>
	<updated>2026-05-14T00:45:30Z</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:vi-sortkey&amp;diff=495039&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:vi-sortkey&amp;diff=495039&amp;oldid=prev"/>
		<updated>2026-04-21T12:00:08Z</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 12:00, 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:vi-sortkey&amp;diff=495038&amp;oldid=prev</id>
		<title>wikt&gt;Theknightwho: Memoisation moved to Module:memoize.</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:vi-sortkey&amp;diff=495038&amp;oldid=prev"/>
		<updated>2024-12-20T20:36:56Z</updated>

		<summary type="html">&lt;p&gt;Memoisation moved to &lt;a href=&quot;/wiki/Module:memoize&quot; title=&quot;Module:memoize&quot;&gt;Module:memoize&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&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 gsub = m_str_utils.gsub&lt;br /&gt;
local lower = m_str_utils.lower&lt;br /&gt;
local toNFC = mw.ustring.toNFC&lt;br /&gt;
local toNFD = mw.ustring.toNFD&lt;br /&gt;
local u = m_str_utils.char&lt;br /&gt;
local upper = m_str_utils.upper&lt;br /&gt;
&lt;br /&gt;
local a, b = u(0xF000), u(0xF001)&lt;br /&gt;
&lt;br /&gt;
local diacritics = {&lt;br /&gt;
	--[===[--Order given by Stephen G. Brown&lt;br /&gt;
	[u(0x0301)] = c, -- acute&lt;br /&gt;
	[u(0x0300)] = d, -- grave&lt;br /&gt;
	[u(0x0309)] = e, -- hook&lt;br /&gt;
	[u(0x0303)] = f, -- tilde&lt;br /&gt;
	[u(0x0323)] = g -- dot above]===]&lt;br /&gt;
	-- Order given by Fumiko Take&lt;br /&gt;
	[u(0x0300)] = &amp;quot;!&amp;quot;, -- grave&lt;br /&gt;
	[u(0x0309)] = &amp;quot;#&amp;quot;, -- hook&lt;br /&gt;
	[u(0x0303)] = &amp;quot;$&amp;quot;, -- tilde&lt;br /&gt;
	[u(0x0301)] = &amp;quot;%&amp;quot;, -- acute&lt;br /&gt;
	[u(0x0323)] = &amp;quot;&amp;amp;&amp;quot; -- dot above&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local oneChar = { -- separate letters&lt;br /&gt;
	[&amp;quot;ă&amp;quot;] = &amp;quot;a&amp;quot; .. a, [&amp;quot;â&amp;quot;] = &amp;quot;a&amp;quot; .. b, [&amp;quot;đ&amp;quot;] = &amp;quot;d&amp;quot; .. a, [&amp;quot;ê&amp;quot;] = &amp;quot;e&amp;quot; .. a, [&amp;quot;ô&amp;quot;] = &amp;quot;o&amp;quot; .. a, [&amp;quot;ơ&amp;quot;] = &amp;quot;o&amp;quot; .. b, [&amp;quot;ư&amp;quot;] = &amp;quot;u&amp;quot; .. a&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function export.makeSortKey(text, lang, sc)&lt;br /&gt;
	text = gsub(lower(toNFD(text)), &amp;quot;.&amp;quot;, diacritics)&lt;br /&gt;
	&lt;br /&gt;
	text = gsub(text, &amp;quot;([!-&amp;amp;])([^%s]+)&amp;quot;, &amp;quot;%2%1&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	return upper(gsub(toNFC(text), &amp;quot;.&amp;quot;, oneChar))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local vi = require(&amp;quot;Module:languages&amp;quot;).getByCode(&amp;quot;vi&amp;quot;)&lt;br /&gt;
local function tag(text)&lt;br /&gt;
	return require(&amp;quot;Module:script utilities&amp;quot;).tag_text(text, vi)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local showsubst = {&lt;br /&gt;
	[a] = &amp;quot;₂&amp;quot;, [b] = &amp;quot;₃&amp;quot;, [&amp;quot;!&amp;quot;] = &amp;quot;²&amp;quot;, [&amp;quot;#&amp;quot;] = &amp;quot;³&amp;quot;, [&amp;quot;$&amp;quot;] = &amp;quot;⁴&amp;quot;, [&amp;quot;%&amp;quot;] = &amp;quot;⁵&amp;quot;, [&amp;quot;&amp;amp;&amp;quot;] = &amp;quot;⁶&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function export.showSortkey(frame)&lt;br /&gt;
	local output = {}&lt;br /&gt;
	&lt;br /&gt;
	for _, word in ipairs(frame.args) do&lt;br /&gt;
		local sc = vi:findBestScript(word):getCode()&lt;br /&gt;
		local sortkey = gsub(export.makeSortKey(word, &amp;quot;vi&amp;quot;, sc), &amp;quot;.&amp;quot;, showsubst)&lt;br /&gt;
		sortkey = gsub(sortkey, &amp;quot;([^0-9²³⁴⁵⁶])$&amp;quot;, &amp;quot;%1¹&amp;quot;)&lt;br /&gt;
		sortkey = gsub(sortkey, &amp;quot;([^0-9²³⁴⁵⁶])(%s)&amp;quot;, &amp;quot;%1¹%2&amp;quot;)&lt;br /&gt;
		local example = &amp;quot;\n* &amp;lt;code&amp;gt;&amp;quot; .. sortkey .. &amp;quot;&amp;lt;/code&amp;gt;\n: &amp;quot; .. tag(word)&lt;br /&gt;
		table.insert(output, example)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(output)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.showSorting(frame)&lt;br /&gt;
	local terms = {}&lt;br /&gt;
	&lt;br /&gt;
	for _, term in ipairs(frame.args) do&lt;br /&gt;
		table.insert(terms, term)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local makeSortKey = require(&amp;quot;Module:memoize&amp;quot;)(export.makeSortKey)&lt;br /&gt;
	local function comp(term1, term2)&lt;br /&gt;
		return makeSortKey(term1) &amp;lt; makeSortKey(term2)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.sort(terms, comp)&lt;br /&gt;
	&lt;br /&gt;
	for i, term in pairs(terms) do&lt;br /&gt;
		local sc = vi:findBestScript(term):getCode()&lt;br /&gt;
		local sortkey = gsub(export.makeSortKey(term, &amp;quot;vi&amp;quot;, sc), &amp;quot;.&amp;quot;, showsubst)&lt;br /&gt;
		sortkey = gsub(sortkey, &amp;quot;([^0-9²³⁴⁵⁶])$&amp;quot;, &amp;quot;%1¹&amp;quot;)&lt;br /&gt;
		sortkey = gsub(sortkey, &amp;quot;([^0-9²³⁴⁵⁶])(%s)&amp;quot;, &amp;quot;%1¹%2&amp;quot;)&lt;br /&gt;
		terms[i] = &amp;quot;\n* &amp;quot; .. tag(term) .. &amp;quot; (&amp;lt;code&amp;gt;&amp;quot; .. sortkey .. &amp;quot;&amp;lt;/code&amp;gt;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(terms)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>wikt&gt;Theknightwho</name></author>
	</entry>
</feed>