<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AChem2</id>
	<title>Module:Chem2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AChem2"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Chem2&amp;action=history"/>
	<updated>2026-04-04T16:55:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the-democratika.com/wiki/index.php?title=Module:Chem2&amp;diff=6941&amp;oldid=prev</id>
		<title>&gt;Paine Ellsworth: per edit request on talk page - correct symbol for Copernicium = Cn</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Chem2&amp;diff=6941&amp;oldid=prev"/>
		<updated>2024-12-26T04:47:22Z</updated>

		<summary type="html">&lt;p&gt;per edit request on talk page - correct symbol for Copernicium = Cn&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local p = {} -- module&amp;#039;s table&lt;br /&gt;
&lt;br /&gt;
-- Elements with wiki links&lt;br /&gt;
local am = {&lt;br /&gt;
	H = &amp;quot;Hydrogen&amp;quot;,&lt;br /&gt;
	He = &amp;quot;Helium&amp;quot;,&lt;br /&gt;
	Li = &amp;quot;Lithium&amp;quot;,&lt;br /&gt;
	Be = &amp;quot;Beryllium&amp;quot;,&lt;br /&gt;
	B = &amp;quot;Boron&amp;quot;,&lt;br /&gt;
	C = &amp;quot;Carbon&amp;quot;,&lt;br /&gt;
	N = &amp;quot;Nitrogen&amp;quot;,&lt;br /&gt;
	O = &amp;quot;Oxygen&amp;quot;,&lt;br /&gt;
	F = &amp;quot;Fluorine&amp;quot;,&lt;br /&gt;
	Ne = &amp;quot;Neon&amp;quot;,&lt;br /&gt;
	Na = &amp;quot;Sodium&amp;quot;,&lt;br /&gt;
	Mg = &amp;quot;Magnesium&amp;quot;,&lt;br /&gt;
	Al = &amp;quot;Aluminium&amp;quot;,&lt;br /&gt;
	Si = &amp;quot;Silicon&amp;quot;,&lt;br /&gt;
	P = &amp;quot;Phosphorus&amp;quot;,&lt;br /&gt;
	S = &amp;quot;Sulfur&amp;quot;,&lt;br /&gt;
	Cl = &amp;quot;Chlorine&amp;quot;,&lt;br /&gt;
	Ar = &amp;quot;Argon&amp;quot;,&lt;br /&gt;
	K = &amp;quot;Potassium&amp;quot;,&lt;br /&gt;
	Ca = &amp;quot;Calcium&amp;quot;,&lt;br /&gt;
	Sc = &amp;quot;Scandium&amp;quot;,&lt;br /&gt;
	Ti = &amp;quot;Titanium&amp;quot;,&lt;br /&gt;
	V = &amp;quot;Vanadium&amp;quot;,&lt;br /&gt;
	Cr = &amp;quot;Chromium&amp;quot;,&lt;br /&gt;
	Mn = &amp;quot;Manganese&amp;quot;,&lt;br /&gt;
	Fe = &amp;quot;Iron&amp;quot;,&lt;br /&gt;
	Co = &amp;quot;Cobalt&amp;quot;,&lt;br /&gt;
	Ni = &amp;quot;Nickel&amp;quot;,&lt;br /&gt;
	Cu = &amp;quot;Copper&amp;quot;,&lt;br /&gt;
	Zn = &amp;quot;Zinc&amp;quot;,&lt;br /&gt;
	Ga = &amp;quot;Gallium&amp;quot;,&lt;br /&gt;
	Ge = &amp;quot;Germanium&amp;quot;,&lt;br /&gt;
	As = &amp;quot;Arsenic&amp;quot;,&lt;br /&gt;
	Se = &amp;quot;Selenium&amp;quot;,&lt;br /&gt;
	Br = &amp;quot;Bromine&amp;quot;,&lt;br /&gt;
	Kr = &amp;quot;Krypton&amp;quot;,&lt;br /&gt;
	Rb = &amp;quot;Rubidium&amp;quot;,&lt;br /&gt;
	Sr = &amp;quot;Strontium&amp;quot;,&lt;br /&gt;
	Y = &amp;quot;Yttrium&amp;quot;,&lt;br /&gt;
	Zr = &amp;quot;Zirconium&amp;quot;,&lt;br /&gt;
	Nb = &amp;quot;Niobium&amp;quot;,&lt;br /&gt;
	Mo = &amp;quot;Molybdenum&amp;quot;,&lt;br /&gt;
	Tc = &amp;quot;Technetium&amp;quot;,&lt;br /&gt;
	Ru = &amp;quot;Ruthenium&amp;quot;,&lt;br /&gt;
	Rh = &amp;quot;Rhodium&amp;quot;,&lt;br /&gt;
	Pd = &amp;quot;Palladium&amp;quot;,&lt;br /&gt;
	Ag = &amp;quot;Silver&amp;quot;,&lt;br /&gt;
	Cd = &amp;quot;Cadmium&amp;quot;,&lt;br /&gt;
	In = &amp;quot;Indium&amp;quot;,&lt;br /&gt;
	Sn = &amp;quot;Tin&amp;quot;,&lt;br /&gt;
	Sb = &amp;quot;Antimony&amp;quot;,&lt;br /&gt;
	Te = &amp;quot;Tellurium&amp;quot;,&lt;br /&gt;
	I = &amp;quot;Iodine&amp;quot;,&lt;br /&gt;
	Xe = &amp;quot;Xenon&amp;quot;,&lt;br /&gt;
	Cs = &amp;quot;Caesium&amp;quot;,&lt;br /&gt;
	Ba = &amp;quot;Barium&amp;quot;,&lt;br /&gt;
	La = &amp;quot;Lanthanum&amp;quot;,&lt;br /&gt;
	Ce = &amp;quot;Cerium&amp;quot;,&lt;br /&gt;
	Pr = &amp;quot;Praseodymium&amp;quot;,&lt;br /&gt;
	Nd = &amp;quot;Neodymium&amp;quot;,&lt;br /&gt;
	Pm = &amp;quot;Promethium&amp;quot;,&lt;br /&gt;
	Sm = &amp;quot;Samarium&amp;quot;,&lt;br /&gt;
	Eu = &amp;quot;Europium&amp;quot;,&lt;br /&gt;
	Gd = &amp;quot;Gadolinium&amp;quot;,&lt;br /&gt;
	Tb = &amp;quot;Terbium&amp;quot;,&lt;br /&gt;
	Dy = &amp;quot;Dysprosium&amp;quot;,&lt;br /&gt;
	Ho = &amp;quot;Holmium&amp;quot;,&lt;br /&gt;
	Er = &amp;quot;Erbium&amp;quot;,&lt;br /&gt;
	Tm = &amp;quot;Thulium&amp;quot;,&lt;br /&gt;
	Yb = &amp;quot;Ytterbium&amp;quot;,&lt;br /&gt;
	Lu = &amp;quot;Lutetium&amp;quot;,&lt;br /&gt;
	Hf = &amp;quot;Hafnium&amp;quot;,&lt;br /&gt;
	Ta = &amp;quot;Tantalum&amp;quot;,&lt;br /&gt;
	W = &amp;quot;Tungsten&amp;quot;,&lt;br /&gt;
	Re = &amp;quot;Rhenium&amp;quot;,&lt;br /&gt;
	Os = &amp;quot;Osmium&amp;quot;,&lt;br /&gt;
	Ir = &amp;quot;Iridium&amp;quot;,&lt;br /&gt;
	Pt = &amp;quot;Platinum&amp;quot;,&lt;br /&gt;
	Au = &amp;quot;Gold&amp;quot;,&lt;br /&gt;
	Hg = &amp;quot;Mercury (element)&amp;quot;,&lt;br /&gt;
	Tl = &amp;quot;Thallium&amp;quot;,&lt;br /&gt;
	Pb = &amp;quot;Lead&amp;quot;,&lt;br /&gt;
	Bi = &amp;quot;Bismuth&amp;quot;,&lt;br /&gt;
	Po = &amp;quot;Polonium&amp;quot;,&lt;br /&gt;
	At = &amp;quot;Astatine&amp;quot;,&lt;br /&gt;
	Rn = &amp;quot;Radon&amp;quot;,&lt;br /&gt;
	Fr = &amp;quot;Francium&amp;quot;,&lt;br /&gt;
	Ra = &amp;quot;Radium&amp;quot;,&lt;br /&gt;
	Ac = &amp;quot;Actinium&amp;quot;,&lt;br /&gt;
	Th = &amp;quot;Thorium&amp;quot;,&lt;br /&gt;
	Pa = &amp;quot;Protactinium&amp;quot;,&lt;br /&gt;
	U = &amp;quot;Uranium&amp;quot;,&lt;br /&gt;
	Np = &amp;quot;Neptunium&amp;quot;,&lt;br /&gt;
	Pu = &amp;quot;Plutonium&amp;quot;,&lt;br /&gt;
	Am = &amp;quot;Americium&amp;quot;,&lt;br /&gt;
	Cm = &amp;quot;Curium&amp;quot;,&lt;br /&gt;
	Bk = &amp;quot;Berkelium&amp;quot;,&lt;br /&gt;
	Cf = &amp;quot;Californium&amp;quot;,&lt;br /&gt;
	Es = &amp;quot;Einsteinium&amp;quot;,&lt;br /&gt;
	Fm = &amp;quot;Fermium&amp;quot;,&lt;br /&gt;
	Md = &amp;quot;Mendelevium&amp;quot;,&lt;br /&gt;
	No = &amp;quot;Nobelium&amp;quot;,&lt;br /&gt;
	Lr = &amp;quot;Lawrencium&amp;quot;,&lt;br /&gt;
	Rf = &amp;quot;Rutherfordium&amp;quot;,&lt;br /&gt;
	Db = &amp;quot;Dubnium&amp;quot;,&lt;br /&gt;
	Sg = &amp;quot;Seaborgium&amp;quot;,&lt;br /&gt;
	Bh = &amp;quot;Bohrium&amp;quot;,&lt;br /&gt;
	Hs = &amp;quot;Hassium&amp;quot;,&lt;br /&gt;
	Mt = &amp;quot;Meitnerium&amp;quot;,&lt;br /&gt;
	Ds = &amp;quot;Darmstadtium&amp;quot;,&lt;br /&gt;
	Rg = &amp;quot;Roentgenium&amp;quot;,&lt;br /&gt;
	Cn = &amp;quot;Copernicium&amp;quot;,&lt;br /&gt;
	Nh = &amp;quot;Nihonium&amp;quot;,&lt;br /&gt;
	Fl = &amp;quot;Flerovium&amp;quot;,&lt;br /&gt;
	Mc = &amp;quot;Moscovium&amp;quot;,&lt;br /&gt;
	Lv = &amp;quot;Livermorium&amp;quot;,&lt;br /&gt;
	Ts = &amp;quot;Tennessine&amp;quot;,&lt;br /&gt;
	Og = &amp;quot;Oganesson&amp;quot;,&lt;br /&gt;
	&lt;br /&gt;
	-- Groups etc with element-like names&lt;br /&gt;
	Bn = &amp;#039;Benzyl group&amp;#039;,&lt;br /&gt;
	Bu = &amp;#039;Butyl group&amp;#039;,&lt;br /&gt;
	Bz = &amp;#039;Benzoyl group&amp;#039;,&lt;br /&gt;
	Cp = &amp;#039;Cyclopentadienyl&amp;#039;,&lt;br /&gt;
	D = &amp;#039;Deuterium&amp;#039;,&lt;br /&gt;
	Et = &amp;#039;Ethyl group&amp;#039;,&lt;br /&gt;
	Ln = &amp;#039;Lanthanide&amp;#039;,&lt;br /&gt;
	Me = &amp;#039;Methyl group&amp;#039;,&lt;br /&gt;
	Nu = &amp;#039;Nucleophile&amp;#039;,&lt;br /&gt;
	Ph = &amp;#039;Phenyl group&amp;#039;,&lt;br /&gt;
	Pn = &amp;#039;Pentyl group&amp;#039;,&lt;br /&gt;
	R = &amp;#039;Substituent&amp;#039;,&lt;br /&gt;
	T = &amp;#039;Tritium&amp;#039;,&lt;br /&gt;
	Tf = &amp;#039;Trifluoromethylsulfonyl group&amp;#039;,&lt;br /&gt;
	X = &amp;#039;Halogen&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Groups which are redirected from their normal target if wikilinked; never&lt;br /&gt;
-- autolinked.&lt;br /&gt;
local groups = {&lt;br /&gt;
	CH3 = &amp;#039;Methyl group&amp;#039;,&lt;br /&gt;
	CO3 = &amp;#039;Carbonate&amp;#039;,&lt;br /&gt;
	COOH = &amp;#039;Carboxyl group&amp;#039;,&lt;br /&gt;
	ClO = &amp;#039;Hypochlorite&amp;#039;,&lt;br /&gt;
	ClO2 = &amp;#039;Chlorite&amp;#039;,&lt;br /&gt;
	ClO3 = &amp;#039;Chlorate&amp;#039;,&lt;br /&gt;
	ClO4 = &amp;#039;Perchlorate&amp;#039;,&lt;br /&gt;
	H2O = &amp;#039;Water of crystallization&amp;#039;,&lt;br /&gt;
	H3O = &amp;#039;Hydronium&amp;#039;,&lt;br /&gt;
	NH2 = &amp;#039;Amine group&amp;#039;,&lt;br /&gt;
	NH4 = &amp;#039;Ammonium&amp;#039;,&lt;br /&gt;
	NO3 = &amp;#039;Nitrate&amp;#039;,&lt;br /&gt;
	PO3 = &amp;#039;Phosphite&amp;#039;,&lt;br /&gt;
	PO4 = &amp;#039;Phosphate&amp;#039;,&lt;br /&gt;
	SH = &amp;#039;Thiol group&amp;#039;,&lt;br /&gt;
	SO3 = &amp;#039;Sulfite&amp;#039;,&lt;br /&gt;
	SO4 = &amp;#039;Sulfate&amp;#039;,&lt;br /&gt;
	SeH = &amp;#039;Selenol group&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local T_ELEM = 0         -- token types&lt;br /&gt;
local T_NUM = 1          -- number&lt;br /&gt;
local T_OPEN = 2         -- open &amp;#039;(&amp;#039;&lt;br /&gt;
local T_CLOSE = 3        -- close &amp;#039;)&amp;#039;&lt;br /&gt;
local T_PM_CHARGE = 4    -- + or −&lt;br /&gt;
local T_WATER = 6        -- .xH2O x number&lt;br /&gt;
local T_CRYSTAL = 9      -- .x&lt;br /&gt;
local T_CHARGE = 8       -- charge (x+), (x-)&lt;br /&gt;
local T_SUF_CHARGE = 10  -- suffix and charge e.g. 2+ from H2+&lt;br /&gt;
local T_SUF_CHARGE2 = 12 -- suffix and (charge) e.g. 2(2+) from He2(2+)&lt;br /&gt;
local T_SPECIAL = 14     -- starting with \ e.g. \d for double bond (=)&lt;br /&gt;
local T_SPECIAL2 = 16    -- starting with \y{x} e.g. \i{12} for isotope with mass number 12&lt;br /&gt;
local T_ARROW_R = 17     -- match: -&amp;gt;&lt;br /&gt;
local T_ARROW_EQ = 18    -- match: &amp;lt;-&amp;gt;&lt;br /&gt;
local T_UNDERSCORE = 19  -- _{ ... }&lt;br /&gt;
local T_CARET = 20       -- ^{ ... }&lt;br /&gt;
local T_LINKOPEN = 21    -- Opening of link, always like &amp;quot;[[target|&amp;quot; even if the source wasn&amp;#039;t&lt;br /&gt;
local T_NOCHANGE = 30    -- Anything else like ☃&lt;br /&gt;
&lt;br /&gt;
function su(up, down)&lt;br /&gt;
	if up == &amp;quot;&amp;quot; then&lt;br /&gt;
		return (&amp;#039;&amp;lt;sub class=&amp;quot;template-chem2-sub&amp;quot;&amp;gt;%s&amp;lt;/sub&amp;gt;&amp;#039;):format(down)&lt;br /&gt;
	end&lt;br /&gt;
	if down == &amp;quot;&amp;quot; then&lt;br /&gt;
		return (&amp;#039;&amp;lt;sup class=&amp;quot;template-chem2-sup&amp;quot;&amp;gt;%s&amp;lt;/sup&amp;gt;&amp;#039;):format(up)&lt;br /&gt;
	end&lt;br /&gt;
    return (&amp;#039;&amp;lt;span class=&amp;quot;template-chem2-su&amp;quot;&amp;gt;&amp;lt;span&amp;gt;%s&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;%s&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;):format(up, down)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function DotIt()&lt;br /&gt;
    return &amp;#039;&amp;amp;middot;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function item(f) -- (iterator) returns one token (type, value) at a time from the formula &amp;#039;f&amp;#039;&lt;br /&gt;
    local i = 1&lt;br /&gt;
&lt;br /&gt;
    return function ()&lt;br /&gt;
        local t, x = nil, nil&lt;br /&gt;
&lt;br /&gt;
        if (i == 1) and f:match(&amp;#039;^[0-9]&amp;#039;, i) then &lt;br /&gt;
            x = f:match(&amp;#039;^[%d.]+&amp;#039;, i); t = T_NOCHANGE; i = i + x:len();   -- matching coefficient (need a space first)&lt;br /&gt;
&lt;br /&gt;
        elseif i &amp;lt;= f:len() then&lt;br /&gt;
            x = f:match(&amp;#039;^%s+[%d.]+&amp;#039;, i); t = T_NOCHANGE;  -- matching coefficient (need a space first)&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%s[+]&amp;#039;, i); t = T_NOCHANGE; end       -- matching + (H2O + H2O)&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%&amp;amp;%#[%w%d]+%;&amp;#039;, i); t = T_NOCHANGE; end       -- &amp;amp;#...;&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%&amp;lt;%-%&amp;gt;&amp;#039;, i); t = T_ARROW_EQ; end       -- matching &amp;lt;-&amp;gt;&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%-%&amp;gt;&amp;#039;, i); t = T_ARROW_R; end       -- matching -&amp;gt;&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%u%l*&amp;#039;, i); t = T_ELEM; end        -- matching symbols like Aaaaa&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%d+[+-]&amp;#039;, i); t = T_SUF_CHARGE; end        -- matching x+, x-&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%d+%(%d*[+-]%)&amp;#039;, i); t = T_SUF_CHARGE2; end        -- matching x(y+/-), x(+/-)&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%(%d*[+-]%)&amp;#039;, i); t = T_CHARGE; end        -- matching (x+) (xx+), (x-) (xx-)&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^[%d.]+&amp;#039;, i); t = T_NUM; end        -- matching number&lt;br /&gt;
            if not x and (f:match(&amp;#039;^%[%[%[[^[]&amp;#039;, i) or f:match(&amp;#039;^%[[^[]&amp;#039;, i)) then&lt;br /&gt;
            	i = i + 1; return T_OPEN, &amp;#039;&amp;amp;#91;&amp;#039; end -- escape [[[X or [X (relevant to auto-linking)&lt;br /&gt;
            if not x and f:sub(i, i + 1) == &amp;#039;[[&amp;#039; then&lt;br /&gt;
            	x = f:match(&amp;#039;^%[%[([^]|]*)&amp;#039;, i) -- link target&lt;br /&gt;
            	local len = x:len() + 3&lt;br /&gt;
            	x = &amp;#039;[[&amp;#039; .. (groups[x] or am[x] or x) .. &amp;#039;|&amp;#039;  -- override link target for common groups&lt;br /&gt;
&lt;br /&gt;
            	if f:sub(len + i, len + i) == &amp;#039;]&amp;#039; then&lt;br /&gt;
            		-- We&amp;#039;re going to read the link twice, once as target and once as&lt;br /&gt;
            		-- chemical markup, e.g. [[CH3]] =&amp;gt; &amp;quot;[[CH3|&amp;quot;, &amp;quot;CH3]]&amp;quot;&lt;br /&gt;
            		i = i + 2&lt;br /&gt;
            	else&lt;br /&gt;
            		i = i + len&lt;br /&gt;
            	end&lt;br /&gt;
            	return T_LINKOPEN, x&lt;br /&gt;
            end&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^[(|{|%[]&amp;#039;, i); t = T_OPEN; end     -- matching ({[&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^[)|}|%]]&amp;#039;, i); t = T_CLOSE; end    -- matching )}]&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^[+-]&amp;#039;, i); t = T_PM_CHARGE; end    -- matching + or -&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%*[%d.]*H2O&amp;#039;, i); t = T_WATER; end -- Crystal water&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^%*[%d.]*&amp;#039;, i); t = T_CRYSTAL; end  -- Crystal&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^[\\].{%d+}&amp;#039;, i); t = T_SPECIAL2; end -- \y{x}&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^[\\].&amp;#039;, i); t = T_SPECIAL; end -- \x&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^_{[^}]*}&amp;#039;, i); t = T_UNDERSCORE; end -- _{...}&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^^{[^}]*}&amp;#039;, i); t = T_CARET; end   -- ^{...}&lt;br /&gt;
            if not x then x = f:match(&amp;#039;^.&amp;#039;, i); t = T_NOCHANGE; end  --the rest - one by one&lt;br /&gt;
            if x then i = i + x:len(); else i = i + 999; error(&amp;quot;Invalid character in formula! : &amp;quot;..f) end&lt;br /&gt;
        end&lt;br /&gt;
        return t, x&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._chem(args)&lt;br /&gt;
	&lt;br /&gt;
    local f = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	f = mw.text.decode( f, true ) -- handle entity input (like &amp;amp;minus;): decode right away&lt;br /&gt;
    f = string.gsub(f, &amp;quot;–&amp;quot;, &amp;quot;-&amp;quot;)  -- replace – with - (hyphen not ndash)&lt;br /&gt;
    f = string.gsub(f, &amp;quot;−&amp;quot;, &amp;quot;-&amp;quot;)  -- replace – with - (hyphen not minus sign)&lt;br /&gt;
&lt;br /&gt;
    local formula = &amp;#039;&amp;#039;&lt;br /&gt;
    local t, x&lt;br /&gt;
&lt;br /&gt;
    local link = args[&amp;#039;link&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
    local auto = args[&amp;#039;auto&amp;#039;] or &amp;quot;&amp;quot;&lt;br /&gt;
    local seen = {}&lt;br /&gt;
    local _debug = false&lt;br /&gt;
&lt;br /&gt;
    if not (link == &amp;#039;&amp;#039;) then formula = formula .. &amp;quot;[[&amp;quot; .. link .. &amp;quot;|&amp;quot;; end   -- wikilink start [[link|&lt;br /&gt;
 &lt;br /&gt;
    for t, x in item(f) do &lt;br /&gt;
    	if _debug then&lt;br /&gt;
    		formula = (&amp;quot;%s\n* %d %s&amp;quot;):format(formula, t, x)&lt;br /&gt;
        elseif t == T_ELEM then&lt;br /&gt;
            if (auto == &amp;#039;&amp;#039;) or (not am[x]) or seen[x] then formula = formula .. x&lt;br /&gt;
            else formula = (&amp;quot;%s[[%s|%s]]&amp;quot;):format(formula, am[x], x); seen[x] = true&lt;br /&gt;
            end&lt;br /&gt;
        elseif t == T_COEFFICIENT then formula = formula .. x&lt;br /&gt;
        elseif t == T_NUM        then formula = formula .. su(&amp;quot;&amp;quot;, x);&lt;br /&gt;
        elseif t == T_LINKOPEN   then formula = formula .. x;      -- [[Link|&lt;br /&gt;
        elseif t == T_OPEN       then formula = formula .. x;          -- ([{&lt;br /&gt;
        elseif t == T_CLOSE      then formula = formula .. x;          -- )]}&lt;br /&gt;
        elseif t == T_PM_CHARGE  then formula = formula .. su(x:gsub(&amp;quot;-&amp;quot;, &amp;quot;−&amp;quot;), &amp;quot;&amp;quot;);&lt;br /&gt;
        elseif t == T_SUF_CHARGE then &lt;br /&gt;
            formula = formula .. su(x:match(&amp;quot;[+-]&amp;quot;):gsub(&amp;quot;-&amp;quot;, &amp;quot;−&amp;quot;), x:match(&amp;quot;%d+&amp;quot;), &amp;quot;&amp;quot;);&lt;br /&gt;
        elseif t == T_SUF_CHARGE2 then &lt;br /&gt;
            formula = formula .. su(x:match(&amp;quot;%(%d*[+-]&amp;quot;):gsub(&amp;quot;-&amp;quot;, &amp;quot;−&amp;quot;):sub(2, -1), x:match(&amp;quot;%d+&amp;quot;))&lt;br /&gt;
        elseif t == T_CHARGE then&lt;br /&gt;
        	formula = formula .. &amp;quot;&amp;lt;sup&amp;gt;&amp;quot;&lt;br /&gt;
        	if x:match(&amp;quot;%d+&amp;quot;) then formula = formula .. x:match(&amp;quot;%d+&amp;quot;); end&lt;br /&gt;
        	formula = formula .. x:match(&amp;quot;[%+-]&amp;quot;):gsub(&amp;quot;-&amp;quot;, &amp;quot;−&amp;quot;) .. &amp;quot;&amp;lt;/sup&amp;gt;&amp;quot;;&lt;br /&gt;
        	-- Cannot concatenat a nil value from x:match(&amp;quot;%d+&amp;quot;);&lt;br /&gt;
        elseif t == T_CRYSTAL then formula = formula .. DotIt() .. string.gsub( x, &amp;quot;*&amp;quot;, &amp;#039;&amp;#039;, 1 );&lt;br /&gt;
        elseif t == T_SPECIAL then&lt;br /&gt;
            parameter = x:sub(2, 2) -- x fra \x  &lt;br /&gt;
            if     parameter == &amp;quot;s&amp;quot; then formula = formula .. &amp;quot;−&amp;quot;   -- single bond&lt;br /&gt;
            elseif parameter == &amp;quot;d&amp;quot; then formula = formula .. &amp;quot;=&amp;quot;   -- double bond&lt;br /&gt;
            elseif parameter == &amp;quot;t&amp;quot; then formula = formula .. &amp;quot;≡&amp;quot;   -- tripple bond&lt;br /&gt;
            elseif parameter == &amp;quot;q&amp;quot; then formula = formula .. &amp;quot;≣&amp;quot;   -- Quadruple bond&lt;br /&gt;
            elseif parameter == &amp;quot;h&amp;quot; then formula = formula .. &amp;quot;η&amp;quot;   -- η, hapticity&lt;br /&gt;
            elseif parameter == &amp;quot;*&amp;quot; then formula = formula .. &amp;quot;*&amp;quot;   -- *, normal *&lt;br /&gt;
            elseif parameter == &amp;quot;-&amp;quot; then formula = formula .. &amp;quot;-&amp;quot;   -- -&lt;br /&gt;
            elseif parameter == &amp;quot;\\&amp;quot; then formula = formula .. &amp;quot;\\&amp;quot;   -- \&lt;br /&gt;
            elseif parameter == &amp;quot;\&amp;#039;&amp;quot; then formula = formula .. &amp;quot;&amp;amp;#39;&amp;quot;   -- html-code for &amp;#039;&lt;br /&gt;
            end&lt;br /&gt;
        elseif t == T_SPECIAL2 then  -- \y{x}&lt;br /&gt;
            parameter = x:sub(2, 2) -- y fra \y{x} &lt;br /&gt;
            if parameter  == &amp;quot;h&amp;quot; then --[[Hapticity]]&lt;br /&gt;
                if (auto == &amp;#039;&amp;#039;) then formula = formula .. &amp;quot;η&amp;lt;sup&amp;gt;&amp;quot; .. x:match(&amp;#039;%d+&amp;#039;) .. &amp;quot;&amp;lt;/sup&amp;gt;-&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                    formula = formula .. &amp;quot;[[Hapticity|η&amp;lt;sup&amp;gt;&amp;quot; .. x:match(&amp;#039;%d+&amp;#039;) .. &amp;quot;&amp;lt;/sup&amp;gt;]]-&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
            elseif parameter == &amp;quot;m&amp;quot; then formula = formula .. &amp;quot;μ&amp;lt;sub&amp;gt;&amp;quot; .. x:match(&amp;#039;%d+&amp;#039;) .. &amp;quot;&amp;lt;/sub&amp;gt;-&amp;quot; -- mu ([[bridging ligand]])&lt;br /&gt;
            end&lt;br /&gt;
        elseif t == T_WATER then &lt;br /&gt;
            if x:match(&amp;quot;^%*[%d.]&amp;quot;) then &lt;br /&gt;
                formula = formula .. DotIt() .. x:match(&amp;quot;%f[%.%d]%d*%.?%d*%f[^%.%d%]]&amp;quot;) .. &amp;quot;H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O&amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                formula = formula .. DotIt() .. &amp;quot;H&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;O&amp;quot;;&lt;br /&gt;
            end&lt;br /&gt;
        elseif t == T_UNDERSCORE  then formula = formula .. su(&amp;quot;&amp;quot;, x:gsub(&amp;quot;-&amp;quot;, &amp;quot;−&amp;quot;):sub(3, -2)) -- x contains _{string}&lt;br /&gt;
        elseif t == T_CARET       then formula = formula .. su(x:gsub(&amp;quot;-&amp;quot;, &amp;quot;−&amp;quot;):sub(3, -2), &amp;quot;&amp;quot;) -- x contains ^{string}&lt;br /&gt;
        elseif t == T_ARROW_R     then formula = formula .. &amp;quot; → &amp;quot;&lt;br /&gt;
        elseif t == T_ARROW_EQ    then formula = formula .. &amp;quot; ⇌ &amp;quot;&lt;br /&gt;
        elseif t == T_NOCHANGE    then formula = formula .. x;  -- The rest - everything which isn&amp;#039;t captured by the regular expresions.&lt;br /&gt;
        else error(&amp;#039;unreachable - ???&amp;#039;) end -- in fact, unreachable&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not (link == nil or link == &amp;#039;&amp;#039;) then formula = formula .. &amp;quot;]]&amp;quot;; end   -- wikilink closing ]]&lt;br /&gt;
    formula = mw.getCurrentFrame():preprocess(&amp;#039;&amp;lt;templatestyles src=&amp;quot;Module:Chem2/styles.css&amp;quot;/&amp;gt;&amp;#039;) ..&lt;br /&gt;
        &amp;#039;&amp;lt;span class=&amp;quot;chemf nowrap&amp;quot;&amp;gt;&amp;#039; .. formula .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
    if args[2] or args[3] or args[4] then&lt;br /&gt;
        formula = formula .. require(&amp;#039;Module:If preview&amp;#039;)._warning{&lt;br /&gt;
&amp;#039;&amp;amp;#123;&amp;amp;#123;chem2&amp;amp;#125;&amp;amp;#125; was called with multiple positional arguments. It should have just one, e.g. &amp;amp;#123;&amp;amp;#123;chem2&amp;amp;#124;H2O&amp;amp;#125;&amp;amp;#125;.&amp;#039;&lt;br /&gt;
        }&lt;br /&gt;
    end&lt;br /&gt;
    return formula&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.chem(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    return p._chem(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- PRIVATE function to generate documentation.&lt;br /&gt;
function p._autodoc(frame)&lt;br /&gt;
	local TableTools = require(&amp;#039;Module:TableTools&amp;#039;) -- we don&amp;#039;t want to load this on articles for no reason&lt;br /&gt;
	local result = {&lt;br /&gt;
		&amp;#039;===Elements and element-style symbols===\nThese may be automatically linked or used as if they were redirects.\n&amp;#039;,&lt;br /&gt;
		&amp;#039;{| class=&amp;quot;wikitable&amp;quot;\n! Symbol !! Link target\n&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	for symbol, target in TableTools.sortedPairs(am) do&lt;br /&gt;
		result[#result + 1] = (&amp;#039;|-\n| %s || [[%s]]\n&amp;#039;):format(symbol, target)&lt;br /&gt;
	end&lt;br /&gt;
	result[#result + 1] = &amp;#039;|}\n===Groups===\nThese must be linked manually; they work as if they were redirects.\n&amp;#039;&lt;br /&gt;
	result[#result + 1] = &amp;#039;{| class=&amp;quot;wikitable&amp;quot;\n! Symbol !! Link target\n&amp;#039;&lt;br /&gt;
	for symbol, target in TableTools.sortedPairs(groups) do&lt;br /&gt;
		result[#result + 1] = (&amp;#039;|-\n| %s || [[%s]]\n&amp;#039;):format(symbol, target)&lt;br /&gt;
	end&lt;br /&gt;
	result[#result + 1] = &amp;#039;|}&amp;#039;&lt;br /&gt;
	return table.concat(result)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;Paine Ellsworth</name></author>
	</entry>
</feed>