<?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%3ASandbox%2Ftrappist_the_monk%2Ftest</id>
	<title>Module:Sandbox/trappist the monk/test - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2Ftrappist_the_monk%2Ftest"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/trappist_the_monk/test&amp;action=history"/>
	<updated>2026-04-22T00:28:44Z</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:Sandbox/trappist_the_monk/test&amp;diff=146637&amp;oldid=prev</id>
		<title>imported&gt;Trappist the monk at 15:47, 14 January 2018</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/trappist_the_monk/test&amp;diff=146637&amp;oldid=prev"/>
		<updated>2018-01-14T15:47:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
this code is a test of an alternate method for dissecting IETF language tags.  Because this is a hack, it is only&lt;br /&gt;
meant to be run from the debug console.  To do that, in the console window below, type: =p.get_ietf_parts(&amp;lt;tag&amp;gt;)&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
p={}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; P A R S E _ I E T F &amp;gt;----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function parse_ietf (source, pattern_table)&lt;br /&gt;
	local element = {}&lt;br /&gt;
	&lt;br /&gt;
	for _, pattern in ipairs (pattern_table) do&lt;br /&gt;
		element[1], element[2], element[3], element[4] = source:match (pattern);&lt;br /&gt;
		if element[1] then&lt;br /&gt;
			return element[1], element[2], element[3], element[4];&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; G E T _ I E T F _ P A R T S &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
extracts and returns IETF language tag parts:&lt;br /&gt;
	primary language subtag (required) - 2 or 3 character IANA language code&lt;br /&gt;
	script subtag - four character IANA script code&lt;br /&gt;
	region subtag - two-letter or three digit IANA region code&lt;br /&gt;
	variant subtag - four digit or 5-8 alnum variant code&lt;br /&gt;
	private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag&lt;br /&gt;
&lt;br /&gt;
in any one of these forms&lt;br /&gt;
	lang					lang-variant&lt;br /&gt;
	lang-script				lang-script-variant&lt;br /&gt;
	lang-region				lang-region-variant&lt;br /&gt;
	lang-script-region		lang-script-region-variant&lt;br /&gt;
	lang-x-private	&lt;br /&gt;
	&lt;br /&gt;
each of lang, script, region, variant, and private, when used, must be valid&lt;br /&gt;
&lt;br /&gt;
Languages with both two- and three-character code synonyms are promoted to the two-character synonym because&lt;br /&gt;
the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding&lt;br /&gt;
the synonymous three-character codes in the lang= attribute.&lt;br /&gt;
&lt;br /&gt;
For {{lang-xx}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}}&lt;br /&gt;
because those parameters are superfluous to the IETF subtags in |code=)&lt;br /&gt;
&lt;br /&gt;
returns six  values.  Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid&lt;br /&gt;
parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil.&lt;br /&gt;
&lt;br /&gt;
see http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function p.get_ietf_parts (frame)&lt;br /&gt;
	local code;&lt;br /&gt;
	local script;&lt;br /&gt;
	local region;&lt;br /&gt;
	local variant;&lt;br /&gt;
	local private;&lt;br /&gt;
	&lt;br /&gt;
local source = frame.args[1];	-- debug&lt;br /&gt;
&lt;br /&gt;
	local csrv_patterns = {																			-- code, script, region, variant patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$&amp;#039;,												-- cc-Ssss-RR-variant (where variant is 4 digits)&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$&amp;#039;,											-- cc-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits)&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$&amp;#039;,	-- cc-Ssss-RR-variant (where variant is 5-8 alnum characters)&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$&amp;#039;,	-- cc-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local crv_patterns = {																			-- code, region, variant patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$&amp;#039;,															-- cc-RR-variant (where variant is 4 digits)&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$&amp;#039;,														-- cc-DDD-variant (where region is 3 digits; variant is 4 digits)&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$&amp;#039;,				-- cc-RR-variant (where variant is 5-8 alnum characters)&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%d%d%d)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$&amp;#039;,				-- cc-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local csv_patterns = {																			-- code, script, variant patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$&amp;#039;,														-- cc-Ssss-variant (where variant is 4 digits)&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$&amp;#039;,			-- cc-Ssss-variant (where variant is 5-8 alnum characters)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local csr_patterns = {																			-- code, script, region patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$&amp;#039;,															-- cc-Ssss-RR&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$&amp;#039;,														-- cc-Ssss-DDD (where region is 3 digits)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local cv_patterns = {																			-- code, variant patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%d%d%d%d)$&amp;#039;,																	-- cc-variant (where variant is 4 digits)&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-([%a%d][%a%d][%a%d][%a%d][%a%d][%a%d]?[%a%d]?[%a%d]?)$&amp;#039;,						-- cc-variant (where variant is 5-8 alnum characters)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local cr_patterns = {																			-- code, region patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a)$&amp;#039;,																		-- cc-RR&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%d%d%d)$&amp;#039;,																	-- cc-DDD (region is 3 digits)&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local cs_patterns = {																			-- code, script patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-(%a%a%a%a)$&amp;#039;,																	-- cc-Ssss&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local cp_patterns = {																			-- code, private-use patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)%-x%-([%a%d][%a%d]?[%a%d]?[%a%d]?[%a%d]?[%a%d]?[%a%d]?[%a%d]?)$&amp;#039;					-- cc-x-pppppppp where private is 1-8 alnum characters&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local c_patterns = {																			-- code, private-use patterns&lt;br /&gt;
		&amp;#039;^(%a%a%a?)$&amp;#039;,																				-- cc&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
--	if not is_set (source) then&lt;br /&gt;
--		return nil, nil, nil, nil, nil, &amp;#039;missing language tag&amp;#039;;	&lt;br /&gt;
--	end&lt;br /&gt;
&lt;br /&gt;
	local _, element_count = source:gsub (&amp;#039;%-&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if 0 == element_count then&lt;br /&gt;
		code = source:match (c_patterns[1]);									-- done this way because there is only one pattern&lt;br /&gt;
	elseif 1 == element_count then&lt;br /&gt;
		while true do															-- spoof a loop so that we can use break to escape when a match is made&lt;br /&gt;
		code, script = source:match (cs_patterns[1]);							-- done this way because there is only one pattern&lt;br /&gt;
		if code then break; end&lt;br /&gt;
		&lt;br /&gt;
		code, region = parse_ietf (source, cr_patterns);&lt;br /&gt;
		if code then break; end&lt;br /&gt;
&lt;br /&gt;
		code, variant = parse_ietf (source, cv_patterns);&lt;br /&gt;
		break;																	-- terminal exit from loop spoof&lt;br /&gt;
		end&lt;br /&gt;
	elseif 2 == element_count then&lt;br /&gt;
		while true do															-- spoof a loop so that we can use break to escape when a match is made&lt;br /&gt;
		code, script, region = parse_ietf (source, csr_patterns);&lt;br /&gt;
		if code then break; end&lt;br /&gt;
		&lt;br /&gt;
		code, script, variant = parse_ietf (source, csv_patterns);&lt;br /&gt;
		if code then break; end&lt;br /&gt;
&lt;br /&gt;
		code, region, variant = parse_ietf (source, crv_patterns);&lt;br /&gt;
		if code then break; end&lt;br /&gt;
&lt;br /&gt;
		code, private = source:match (cp_patterns[1]);							-- the -x- counts as an element but we don&amp;#039;t return that; done this way because there is only one pattern&lt;br /&gt;
		break;																	-- terminal exit from loop spoof&lt;br /&gt;
		end&lt;br /&gt;
	elseif 3 == element_count then&lt;br /&gt;
		code, script, region, variant = parse_ietf (source, csrv_patterns);&lt;br /&gt;
	else&lt;br /&gt;
		return table.concat ({&amp;#039;unrecognized language tag: &amp;#039;, source});		-- debug return&lt;br /&gt;
--		return nil, nil, nil, nil, nil, table.concat ({&amp;#039;unrecognized language tag: &amp;#039;, source});		-- don&amp;#039;t know what we got but it is malformed - too many hyphens&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not code then&lt;br /&gt;
		return nil, nil, nil, nil, nil, table.concat ({&amp;#039;unrecognized language tag: &amp;#039;, source});		-- don&amp;#039;t know what we got but it is malformed&lt;br /&gt;
	end&lt;br /&gt;
--	return code, script, region, variant, private;	-- debug return&lt;br /&gt;
	return table.concat ({code, script or &amp;#039;&amp;#039;, region or &amp;#039;&amp;#039;, variant or &amp;#039;&amp;#039;, private or &amp;#039;&amp;#039;}, &amp;#039;, &amp;#039;); --debug return&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return p;&lt;/div&gt;</summary>
		<author><name>imported&gt;Trappist the monk</name></author>
	</entry>
</feed>