<?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%3AGHS_phrases%2Fsandbox2</id>
	<title>Module:GHS phrases/sandbox2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AGHS_phrases%2Fsandbox2"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:GHS_phrases/sandbox2&amp;action=history"/>
	<updated>2026-05-27T22:29:07Z</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:GHS_phrases/sandbox2&amp;diff=136349&amp;oldid=prev</id>
		<title>imported&gt;DePiep: ←Created page with &#039; -- dead code, remove from /sandbox  local tX100DEV  = 	{ 	[&#039;H1&#039;] = &#039;Physical hazards&#039;, 	[&#039;H2&#039;] = &#039;Health hazards&#039;, 	[&#039;H3&#039;] = &#039;Environmental hazards&#039;, 	[&#039;P1&#039;] = &#039;General precautionary statements&#039;, 	[&#039;P2&#039;] = &#039;Prevention precautionary statements&#039;, 	[&#039;P3&#039;] = &#039;Response precautionary statements&#039;, 	[&#039;P4&#039;] = &#039;Storage precautionary statements&#039;, 	[&#039;P5&#039;] = &#039;Disposal precautionary statements&#039; 	}    ----------------------------------------------------------------------...&#039;</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:GHS_phrases/sandbox2&amp;diff=136349&amp;oldid=prev"/>
		<updated>2021-12-28T05:23:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=WP:AES&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:AES (page does not exist)&quot;&gt;←&lt;/a&gt;Created page with &amp;#039; -- dead code, remove from /sandbox  local tX100DEV  = 	{ 	[&amp;#039;H1&amp;#039;] = &amp;#039;Physical hazards&amp;#039;, 	[&amp;#039;H2&amp;#039;] = &amp;#039;Health hazards&amp;#039;, 	[&amp;#039;H3&amp;#039;] = &amp;#039;Environmental hazards&amp;#039;, 	[&amp;#039;P1&amp;#039;] = &amp;#039;General precautionary statements&amp;#039;, 	[&amp;#039;P2&amp;#039;] = &amp;#039;Prevention precautionary statements&amp;#039;, 	[&amp;#039;P3&amp;#039;] = &amp;#039;Response precautionary statements&amp;#039;, 	[&amp;#039;P4&amp;#039;] = &amp;#039;Storage precautionary statements&amp;#039;, 	[&amp;#039;P5&amp;#039;] = &amp;#039;Disposal precautionary statements&amp;#039; 	}    ----------------------------------------------------------------------...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
-- dead code, remove from /sandbox&lt;br /&gt;
&lt;br /&gt;
local tX100DEV  =&lt;br /&gt;
	{&lt;br /&gt;
	[&amp;#039;H1&amp;#039;] = &amp;#039;Physical hazards&amp;#039;,&lt;br /&gt;
	[&amp;#039;H2&amp;#039;] = &amp;#039;Health hazards&amp;#039;,&lt;br /&gt;
	[&amp;#039;H3&amp;#039;] = &amp;#039;Environmental hazards&amp;#039;,&lt;br /&gt;
	[&amp;#039;P1&amp;#039;] = &amp;#039;General precautionary statements&amp;#039;,&lt;br /&gt;
	[&amp;#039;P2&amp;#039;] = &amp;#039;Prevention precautionary statements&amp;#039;,&lt;br /&gt;
	[&amp;#039;P3&amp;#039;] = &amp;#039;Response precautionary statements&amp;#039;,&lt;br /&gt;
	[&amp;#039;P4&amp;#039;] = &amp;#039;Storage precautionary statements&amp;#039;,&lt;br /&gt;
	[&amp;#039;P5&amp;#039;] = &amp;#039;Disposal precautionary statements&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- test2DEV current range&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function r.test2DEV(frame)&lt;br /&gt;
	local tArgs = getArgs(frame)&lt;br /&gt;
	local min, max, ccRange&lt;br /&gt;
	ccRange = tArgs[&amp;#039;range&amp;#039;]&lt;br /&gt;
	min = string.match(ccRange, &amp;#039;^([PH][%d%+A-Za-z]*)-&amp;#039;) or &amp;#039;Nil&amp;#039;&lt;br /&gt;
	max = string.match(ccRange, &amp;#039;-([PH][%d%+A-Za-z]*)$&amp;#039;) or &amp;#039;Nil&amp;#039;&lt;br /&gt;
	return &amp;#039;test2: &amp;#039; .. ccRange .. &amp;#039; MIN:&amp;#039; .. min .. &amp;#039; MAX:&amp;#039; .. max&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- listRangeDEV&lt;br /&gt;
--&lt;br /&gt;
-- listtypes: all + tablerow x col + pipedlist&lt;br /&gt;
-- range = H330-H399 min-max (inclde 401-330-402 !)&lt;br /&gt;
-- range = single only [AND/OR]&lt;br /&gt;
-- range = all&lt;br /&gt;
-- range = min-max&lt;br /&gt;
-- has ellipses (=wordtype)&lt;br /&gt;
-- X100 group headers H123, P12345&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function r.listRangeDEV(frame) -- DEV&lt;br /&gt;
local tArgs = getArgs(frame)&lt;br /&gt;
local tL = {}&lt;br /&gt;
local t2 = {} -- from listAll orig: wellordered&lt;br /&gt;
&lt;br /&gt;
	-- PARAMS setid, Rmin, Rmax, Rform&lt;br /&gt;
	prepareArgsAndCodes(tArgs)&lt;br /&gt;
	---- setid?; later more&lt;br /&gt;
	tArgs.Range = &amp;#039;H300-H350&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- -- range = todo ellipses, X100, multi/single H/P/all&lt;br /&gt;
	local range = {}&lt;br /&gt;
	range.range, range.min, range.max = getRangeMinMax(tArgs.Range)&lt;br /&gt;
&lt;br /&gt;
	-- -- DEV: range parameter&lt;br /&gt;
	if isDebug then&lt;br /&gt;
		return range.range .. &amp;#039; |min=&amp;#039; .. range.min .. &amp;#039; max=&amp;#039; .. range.max&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039; -- DEV only&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- SOURCE table tGHSdata (H/P GHSdata table)&lt;br /&gt;
	local tGHSdata&lt;br /&gt;
	tGHSdata = GHSdata[&amp;#039;GHSphrases&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
	if tArgName.setid == &amp;#039;&amp;#039; then -- ?&lt;br /&gt;
		-- no setid; -- when when setid=X?&lt;br /&gt;
		errorSetidOrCode(&amp;#039;ERR901&amp;#039;, listRangeDEV)&lt;br /&gt;
		return &amp;#039;ERR901 List range: setid missing: &amp;#039; .. tArgName.setid .. &amp;#039; &amp;#039; .. showTailMsgsCats()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- ORDERED RANGE: t2 { i, code }; pairs not ipairs	-- (from listAll 28-11 7:00)&lt;br /&gt;
	local t2 = {}&lt;br /&gt;
	for s, v in pairs(tGHSdata) do&lt;br /&gt;
		table.insert(t2, s)&lt;br /&gt;
	end&lt;br /&gt;
	t2 = tTools.compressSparseArray(t2)&lt;br /&gt;
	table.sort(t2) -- required&lt;br /&gt;
&lt;br /&gt;
	-- STRUCT TABLE t3 (ordered, has data on code number)&lt;br /&gt;
	-- suffix 1=from 1st table (GHSdata); 2=from t2 (ordered);&lt;br /&gt;
	local t3 = {}&lt;br /&gt;
	local numC, countC, phrase1&lt;br /&gt;
	local hasEllipses = &amp;#039;&amp;#039;&lt;br /&gt;
	local multiC -- C2, C3, C4&lt;br /&gt;
	local trip&lt;br /&gt;
	local withPhrase = true&lt;br /&gt;
	for i2, c2 in pairs(t2) do -- value=phrase: ignored for now, &lt;br /&gt;
		countC = 0&lt;br /&gt;
		multiC = {} &lt;br /&gt;
		local iterator = mw.ustring.gmatch(c2, &amp;#039;%d%d%d&amp;#039;) -- todo not [HP] ???&lt;br /&gt;
		for codeN in iterator do&lt;br /&gt;
			countC = countC + 1&lt;br /&gt;
			if countC == 1 then&lt;br /&gt;
				numC = getNumberFromC(codeN)&lt;br /&gt;
			else -- other codes (not num)&lt;br /&gt;
				table.insert(multiC, countC - 1, codeN)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if withPhrase then&lt;br /&gt;
			phrase1 = tGHSdata[c2]&lt;br /&gt;
			hasEllipses = string.match(phrase1, &amp;#039;%.%.%.&amp;#039;) or false&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		trip = {c2, numC, table.concat(multiC, &amp;#039;, &amp;#039;), countC, i2, tostring(yesno(hasEllipses, true)), phrase1}&lt;br /&gt;
		table.insert(t3, trip)&lt;br /&gt;
		if i2 &amp;gt; 20 then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	t3 = tTools.compressSparseArray(t3)&lt;br /&gt;
&lt;br /&gt;
	-- LIST t33&lt;br /&gt;
	local t33 = {}&lt;br /&gt;
	for i3, tV in ipairs(t3) do&lt;br /&gt;
		table.insert(t33, table.concat(unpack(t3, i3), &amp;#039;; &amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;t33:&amp;#039; .. tTools.size(t3) .. &amp;#039; \n &amp;#039; .. table.concat(t33, &amp;#039; \n &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- H300-H340 into min, max&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
local function getRangeMinMax(ccRange)&lt;br /&gt;
	local c&lt;br /&gt;
	c = mw.text.decode(ccRange)&lt;br /&gt;
	c = mw.ustring.gsub(c, &amp;#039;[%−%–]&amp;#039;, &amp;#039;-&amp;#039;) -- minus, ndash&lt;br /&gt;
	c = mw.ustring.gsub(c, &amp;#039;[^%d%+A-Za-z%-]&amp;#039;, &amp;#039;&amp;#039;) -- hyphen: extra for Range definition&lt;br /&gt;
	c = mw.ustring.gsub(c, &amp;#039;^(%d)&amp;#039;, tArgName.setid .. &amp;#039;%1&amp;#039;)&lt;br /&gt;
	ccRange = mw.ustring.gsub(c, &amp;#039;%+(%d)&amp;#039;, &amp;#039;+&amp;#039; .. tArgName.setid .. &amp;#039;%1&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local min, max&lt;br /&gt;
	min = string.match(ccRange, &amp;#039;^([PH][%d%+A-Za-z]*)-&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	max = string.match(ccRange, &amp;#039;-([PH][%d%+A-Za-z]*)$&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	return ccRange, min, max&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return x&lt;/div&gt;</summary>
		<author><name>imported&gt;DePiep</name></author>
	</entry>
</feed>