<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ALanguage%2Fsandbox</id>
	<title>Module:Language/sandbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ALanguage%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Language/sandbox&amp;action=history"/>
	<updated>2026-05-27T06:40:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Language/sandbox&amp;diff=137223&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&quot;strict&quot;) instead of require(&quot;Module:No globals&quot;)</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Language/sandbox&amp;diff=137223&amp;oldid=prev"/>
		<updated>2022-10-21T09:54:17Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;quot;strict&amp;quot;) instead of require(&amp;quot;Module:No globals&amp;quot;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;quot;strict&amp;quot;)&lt;br /&gt;
local m_data = mw.loadData(&amp;quot;Module:Language/data/sandbox&amp;quot;)&lt;br /&gt;
local langModule = require(&amp;quot;Module:Lang/sandbox&amp;quot;)&lt;br /&gt;
local langData = m_data.languages or m_data&lt;br /&gt;
&lt;br /&gt;
local strings = {&lt;br /&gt;
	[&amp;quot;RECONSTRUCTION&amp;quot;] = &amp;quot;Reconstruction:%s/%s&amp;quot;,&lt;br /&gt;
	[&amp;quot;APPENDIX&amp;quot;] = &amp;quot;Appendix:%s/%s&amp;quot;,&lt;br /&gt;
	[&amp;quot;LINK&amp;quot;] = &amp;quot;[[wikt:%s|%s]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;PIPED_LINK&amp;quot;] = &amp;quot;[[wikt:%s#%s|%s]]&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local errorMessages = {&lt;br /&gt;
	[&amp;quot;NO_LANGUAGE_CODE&amp;quot;] = &amp;quot;No language code.&amp;quot;,&lt;br /&gt;
	[&amp;quot;NO_WIKTIONARY_ENTRY&amp;quot;] = &amp;quot;No Wiktionary entry.&amp;quot;,&lt;br /&gt;
	[&amp;quot;LANGUAGE_NAME_FOR_CODE_NOT_FOUND&amp;quot;] = &amp;quot;The language name for the language code &amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt; was not found.&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local trackingCategories = {&lt;br /&gt;
	[&amp;quot;ERROR_CATEGORY&amp;quot;] = &amp;quot;[[Category:Language module errors]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;RECONSTRUCTED_WITH_NO_ASTERISK&amp;quot;] = &amp;quot;[[Category:Language module reconstructed with no asterisk]]&amp;quot;,&lt;br /&gt;
	[&amp;quot;USING_REDIRECT_CODE&amp;quot;] = &amp;quot;[[Category:Languag module using redirect code]]&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local activeTrackingCategories = {}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; G E T _ E R R O R _ M E S S A G E &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Assembles an error message from message text and error category.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function getErrorMessage(message)&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;span style=&amp;quot;font-size: 100%%; font-style: normal;&amp;quot; class=&amp;quot;error&amp;quot;&amp;gt;Error: %s&amp;lt;/span&amp;gt;&amp;#039;, message) .. trackingCategories[&amp;quot;ERROR_CATEGORY&amp;quot;]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; G E T _ C O D E &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
This function checks if a code used is a redirect code.&lt;br /&gt;
If it is, the code is convered to non-redirect version.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function getCode(code)&lt;br /&gt;
	local redirectCode = m_data.redirects[code]&lt;br /&gt;
	if redirectCode then&lt;br /&gt;
		code = redirectCode&lt;br /&gt;
		table.insert(activeTrackingCategories, trackingCategories[&amp;quot;USING_REDIRECT_CODE&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return code&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; C L E A N _ T E X T &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
This function cleans the text by removing bold and italics.&lt;br /&gt;
If the language used also has special replacements in in the /data sub-module,&lt;br /&gt;
it uses the data there to continue the process.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function cleanText(text, languageCode)&lt;br /&gt;
	local data = langData[languageCode]&lt;br /&gt;
	text = tostring(text)&lt;br /&gt;
&lt;br /&gt;
	-- Remove bold and italics, so that words that contain bolding or emphasis can be linked without piping.&lt;br /&gt;
	text = text:gsub(&amp;quot;\&amp;#039;\&amp;#039;\&amp;#039;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	text = text:gsub(&amp;quot;\&amp;#039;\&amp;#039;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- If the language is not found, return text.&lt;br /&gt;
	if data == nil then&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- If the language does not have diacritics, return text.&lt;br /&gt;
	local replacements = data and data[&amp;quot;replacements&amp;quot;]&lt;br /&gt;
	if replacements == nil then&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Decompose so that the diacritics of characters such&lt;br /&gt;
	-- as á can be removed in one go.&lt;br /&gt;
	-- No need to compose at the end, because the MediaWiki software&lt;br /&gt;
	-- will handle that.&lt;br /&gt;
	local ugsub = mw.ustring.gsub&lt;br /&gt;
	if replacements.decompose then&lt;br /&gt;
		text = mw.ustring.toNFD(text)&lt;br /&gt;
		for i, from in ipairs(replacements.from) do&lt;br /&gt;
			text = ugsub(text, from, replacements.to and replacements.to[i] or &amp;quot;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for regex, replacement in pairs(replacements) do&lt;br /&gt;
			text = ugsub(text, regex, replacement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; C R E A T E _ W I K T I O N A R Y _ L I N K &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
This function creates a link to a Wiktionary entry.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function createWiktionaryLink(wiktionaryText, displayText, languageCode)&lt;br /&gt;
	if languageCode then&lt;br /&gt;
		local data = langData[languageCode]&lt;br /&gt;
		local nameFromTag = langModule._name_from_tag({languageCode})&lt;br /&gt;
&lt;br /&gt;
		-- The name used is determined by the following logic:&lt;br /&gt;
		-- Uses the name in /data sub-module, if set.&lt;br /&gt;
		-- If not, uses the name from the Module:Lang database, if set.&lt;br /&gt;
		-- Finally, uses the MediaWiki name from mw.language.fetchLanguageName().&lt;br /&gt;
		local name&lt;br /&gt;
		if data and data.name then&lt;br /&gt;
			name = data.name&lt;br /&gt;
		elseif nameFromTag and not nameFromTag:find(&amp;quot;error&amp;quot;) then&lt;br /&gt;
			name = nameFromTag&lt;br /&gt;
		else&lt;br /&gt;
			-- On other languages&amp;#039; wikis, use mw.getContentLanguage():getCode(),&lt;br /&gt;
			-- or replace &amp;#039;en&amp;#039; with that wiki&amp;#039;s language code.&lt;br /&gt;
			-- name = mw.language.fetchLanguageName(languageCode, mw.getContentLanguage():getCode())&lt;br /&gt;
			name = mw.language.fetchLanguageName(languageCode, &amp;#039;en&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if name == &amp;quot;&amp;quot; then&lt;br /&gt;
			return getErrorMessage(string.format(errorMessages[&amp;quot;LANGUAGE_NAME_FOR_CODE_NOT_FOUND&amp;quot;], languageCode))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if wiktionaryText:sub(1, 1) == &amp;quot;*&amp;quot; then&lt;br /&gt;
			wiktionaryText = string.format(strings[&amp;quot;RECONSTRUCTION&amp;quot;], name, wiktionaryText:sub(2))&lt;br /&gt;
&lt;br /&gt;
		elseif data and data.type == &amp;quot;reconstructed&amp;quot; then&lt;br /&gt;
			-- Track reconstructed entries with no asterisk by transcluding&lt;br /&gt;
			table.insert(activeTrackingCategories, trackingCategories[&amp;quot;RECONSTRUCTED_WITH_NO_ASTERISK&amp;quot;])&lt;br /&gt;
			wiktionaryText = string.format(strings[&amp;quot;RECONSTRUCTION&amp;quot;], name, wiktionaryText)&lt;br /&gt;
&lt;br /&gt;
		elseif data and data.type == &amp;quot;appendix&amp;quot; then&lt;br /&gt;
			wiktionaryText = string.format(strings[&amp;quot;APPENDIX&amp;quot;], name, wiktionaryText)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return string.format(strings[&amp;quot;PIPED_LINK&amp;quot;], wiktionaryText, name, displayText)&lt;br /&gt;
	else&lt;br /&gt;
		return string.format(strings[&amp;quot;LINK&amp;quot;], wiktionaryText, displayText)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; W I K T &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Entry point for {{wt}}.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function p.wikt(frame)&lt;br /&gt;
	frame[&amp;#039;no_tag&amp;#039;] = true&lt;br /&gt;
	return p.wiktlang(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[ -------------------------- &amp;lt; W I K T L A N G &amp;gt; --------------------------&lt;br /&gt;
&lt;br /&gt;
Entry point for {{wikt-lang}}.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function p.wiktlang(frame)&lt;br /&gt;
	local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	local code = args[1] and mw.text.trim(args[1])&lt;br /&gt;
	if not code then&lt;br /&gt;
		return getErrorMessage(errorMessages[&amp;quot;NO_LANGUAGE_CODE&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local wiktionaryText = args[2]&lt;br /&gt;
	if not wiktionaryText then&lt;br /&gt;
		return getErrorMessage(errorMessages[&amp;quot;NO_WIKTIONARY_ENTRY&amp;quot;])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local displayText = args[3]&lt;br /&gt;
	local languageCode = getCode(code)&lt;br /&gt;
&lt;br /&gt;
	local _, _, _, _, _, errorText = langModule.get_ietf_parts(languageCode)&lt;br /&gt;
	if errorText then&lt;br /&gt;
		return getErrorMessage(errorText)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local italics = args.italic or args.italics or args.i&lt;br /&gt;
&lt;br /&gt;
	local wiktionaryTextCleaned = cleanText(wiktionaryText, languageCode)&lt;br /&gt;
&lt;br /&gt;
	if not displayText then&lt;br /&gt;
		displayText = wiktionaryText&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local wiktionaryLink = createWiktionaryLink(wiktionaryTextCleaned, displayText, languageCode)&lt;br /&gt;
	if not args[&amp;#039;no_tag&amp;#039;] then&lt;br /&gt;
		local langArgs = {code = languageCode, text = wiktionaryLink, italic = italics}&lt;br /&gt;
		wiktionaryLink = langModule._lang(langArgs)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Used for testing&lt;br /&gt;
	if args[&amp;quot;no_cat&amp;quot;] then&lt;br /&gt;
		return wiktionaryLink&lt;br /&gt;
	else&lt;br /&gt;
		return wiktionaryLink .. table.concat(activeTrackingCategories)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>