<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://lugwiki.stcgrupo.es/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AUnit%C3%A9</id>
	<title>Module:Unité - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://lugwiki.stcgrupo.es/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AUnit%C3%A9"/>
	<link rel="alternate" type="text/html" href="https://lugwiki.stcgrupo.es/index.php?title=Module:Unit%C3%A9&amp;action=history"/>
	<updated>2026-04-15T23:52:38Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://lugwiki.stcgrupo.es/index.php?title=Module:Unit%C3%A9&amp;diff=1400&amp;oldid=prev</id>
		<title>Admin : 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://lugwiki.stcgrupo.es/index.php?title=Module:Unit%C3%A9&amp;diff=1400&amp;oldid=prev"/>
		<updated>2021-04-10T11:21:12Z</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;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 10 avril 2021 à 11:21&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawiki:diff:1.41:old-1399:rev-1400 --&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://lugwiki.stcgrupo.es/index.php?title=Module:Unit%C3%A9&amp;diff=1399&amp;oldid=prev</id>
		<title>modèle&gt;Od1n : conformément aux recommandations typographiques, espace aussi pour les fractions à 4 décimales, e.g. 123,123&amp;nbsp;4 (auparavant, à titre exceptionnel, il n&#039;y avait pas d&#039;espace)&amp;nbsp;; cf. discussion</title>
		<link rel="alternate" type="text/html" href="https://lugwiki.stcgrupo.es/index.php?title=Module:Unit%C3%A9&amp;diff=1399&amp;oldid=prev"/>
		<updated>2020-05-16T04:38:15Z</updated>

		<summary type="html">&lt;p&gt;conformément aux recommandations typographiques, espace aussi pour les fractions à 4 décimales, e.g. 123,123 4 (auparavant, à titre exceptionnel, il n&amp;#039;y avait pas d&amp;#039;espace) ; cf. &lt;a href=&quot;/index.php?title=Discussion_mod%C3%A8le:Unit%C3%A9&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Discussion modèle:Unité (page inexistante)&quot;&gt;discussion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- local Delink = require( &amp;#039;Module:Delink&amp;#039; ) -- chargé uniquement si nécessaire&lt;br /&gt;
&lt;br /&gt;
-- Chargement de la base de données des nom d&amp;#039;unités avec gestion d&amp;#039;erreur.&lt;br /&gt;
local moduleData = &amp;#039;Module:Unité/Data&amp;#039;&lt;br /&gt;
local dataSuccess, Data = pcall ( mw.loadData, moduleData )&lt;br /&gt;
if dataSuccess and type( Data ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
	dataSuccess = type( Data.unit ) == &amp;#039;table&amp;#039;&lt;br /&gt;
		and type( Data.prefix ) == &amp;#039;table&amp;#039;&lt;br /&gt;
		and type( Data.exposant ) == &amp;#039;table&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local errorCat = &amp;#039;[[Catégorie:Page incorrectement traitée par le Module:Unité]]&amp;#039;&lt;br /&gt;
local addErrorCat = false&lt;br /&gt;
&lt;br /&gt;
local supUnicode = { [&amp;#039;0&amp;#039;] = &amp;#039;⁰&amp;#039;, [&amp;#039;1&amp;#039;] = &amp;#039;¹&amp;#039;, [&amp;#039;2&amp;#039;] = &amp;#039;²&amp;#039;, [&amp;#039;3&amp;#039;] = &amp;#039;³&amp;#039;, [&amp;#039;4&amp;#039;] = &amp;#039;⁴&amp;#039;, [&amp;#039;5&amp;#039;] = &amp;#039;⁵&amp;#039;, [&amp;#039;6&amp;#039;] = &amp;#039;⁶&amp;#039;, [&amp;#039;7&amp;#039;] = &amp;#039;⁷&amp;#039;, [&amp;#039;8&amp;#039;] = &amp;#039;⁸&amp;#039;, [&amp;#039;9&amp;#039;] = &amp;#039;⁹&amp;#039;,&lt;br /&gt;
	[&amp;#039;+&amp;#039;] = &amp;#039;⁺&amp;#039;, [&amp;#039;-&amp;#039;] = &amp;#039;⁻&amp;#039;, [&amp;#039;=&amp;#039;] = &amp;#039;⁼&amp;#039;, [&amp;#039;(&amp;#039;] = &amp;#039;⁽&amp;#039;, [&amp;#039;)&amp;#039;] = &amp;#039;⁾&amp;#039;, [&amp;#039;n&amp;#039;] = &amp;#039;ⁿ&amp;#039; }&lt;br /&gt;
local subUnicode = { [&amp;#039;0&amp;#039;] = &amp;#039;₀&amp;#039;, [&amp;#039;1&amp;#039;] = &amp;#039;₁&amp;#039;, [&amp;#039;2&amp;#039;] = &amp;#039;₂&amp;#039;, [&amp;#039;3&amp;#039;] = &amp;#039;₃&amp;#039;, [&amp;#039;4&amp;#039;] = &amp;#039;₄&amp;#039;, [&amp;#039;5&amp;#039;] = &amp;#039;₅&amp;#039;, [&amp;#039;6&amp;#039;] = &amp;#039;₆&amp;#039;, [&amp;#039;7&amp;#039;] = &amp;#039;₇&amp;#039;, [&amp;#039;8&amp;#039;] = &amp;#039;₈&amp;#039;, [&amp;#039;9&amp;#039;] = &amp;#039;₉&amp;#039;,&lt;br /&gt;
	[&amp;#039;+&amp;#039;] = &amp;#039;₊&amp;#039;, [&amp;#039;-&amp;#039;] = &amp;#039;₋&amp;#039;, [&amp;#039;=&amp;#039;] = &amp;#039;₌&amp;#039;, [&amp;#039;(&amp;#039;] = &amp;#039;₍&amp;#039;, [&amp;#039;)&amp;#039;] = &amp;#039;₎&amp;#039;,&lt;br /&gt;
	[&amp;#039;a&amp;#039;] = &amp;#039;ₐ&amp;#039;, [&amp;#039;e&amp;#039;] = &amp;#039;ₑ&amp;#039;, [&amp;#039;o&amp;#039;] = &amp;#039;ₒ&amp;#039;, [&amp;#039;x&amp;#039;] = &amp;#039;ₓ&amp;#039;, [&amp;#039;h&amp;#039;] = &amp;#039;ₕ&amp;#039;, [&amp;#039;k&amp;#039;] = &amp;#039;ₖ&amp;#039;, [&amp;#039;l&amp;#039;] = &amp;#039;ₗ&amp;#039;,&lt;br /&gt;
	[&amp;#039;m&amp;#039;] = &amp;#039;ₘ&amp;#039;, [&amp;#039;n&amp;#039;] = &amp;#039;ₙ&amp;#039;, [&amp;#039;p&amp;#039;] = &amp;#039;ₚ&amp;#039;, [&amp;#039;s&amp;#039;] = &amp;#039;ₛ&amp;#039;, [&amp;#039;t&amp;#039;] = &amp;#039;ₜ&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
--- Copie de Outils.trim acceptant les nombres.&lt;br /&gt;
local function trim( texte )&lt;br /&gt;
	if type( texte ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		texte = texte:gsub( &amp;#039;^%s*(%S?.-)%s*$&amp;#039;, &amp;#039;%1&amp;#039; )&lt;br /&gt;
		if texte ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			return texte&lt;br /&gt;
		end&lt;br /&gt;
	elseif type( texte ) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		return tostring( texte )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sanitizeNum( nombre )&lt;br /&gt;
	if type( nombre ) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		return tostring( nombre )&lt;br /&gt;
	elseif type( nombre ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		if nombre:match( &amp;#039;^%-?[%d.,]+$&amp;#039; ) then&lt;br /&gt;
			return nombre&lt;br /&gt;
		end&lt;br /&gt;
		local result = nombre&lt;br /&gt;
			-- remplacement des signes moins ou demi-cadratin par un tiret&lt;br /&gt;
			:gsub( &amp;#039;%−%f[%d]&amp;#039;, &amp;#039;-&amp;#039;)  -- U+2212&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;minus;%f[%d]&amp;#039;, &amp;#039;-&amp;#039;)  -- html &amp;amp;minus;&lt;br /&gt;
			:gsub( &amp;#039;\226\128[\146\147]%f[%d]&amp;#039;, &amp;#039;-&amp;#039;) -- U+2212, U+2213 (tiret numérique et demi-cadratin)&lt;br /&gt;
			-- remplacement des espaces insécable par des espace simple&lt;br /&gt;
			:gsub( &amp;#039;\194\160&amp;#039;, &amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;nbsp;&amp;#039;, &amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;\226\128[\128-\138\175]&amp;#039;, &amp;#039; &amp;#039; ) -- U+2002 à U+200A et U+202F&lt;br /&gt;
			-- trim&lt;br /&gt;
			:gsub( &amp;#039;^%s*(%S?.-)%s*$&amp;#039;, &amp;#039;%1&amp;#039; )&lt;br /&gt;
		return result&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- parseNum transforme si possible une chaine formatée en un chaine interprétable par tonumber()&lt;br /&gt;
-- retourne une chaine pour éviter les arrondi éventuels de lua.&lt;br /&gt;
-- si &amp;quot;nombre&amp;quot; est une chaine non reconnue comme un nombre par la fonction, retourne &amp;quot;nombre&amp;quot;.&lt;br /&gt;
-- si &amp;quot;nombre&amp;quot; n&amp;#039;est pas un number ou une chaine retourne une chaine vide.&lt;br /&gt;
function p.parseNombre( nombre )&lt;br /&gt;
	local result&lt;br /&gt;
	if type( nombre ) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		return tostring( nombre )&lt;br /&gt;
	else&lt;br /&gt;
		-- remplacement des signes moins ou demi-cadratin par un tiret&lt;br /&gt;
		result = p.sanitizeNum( nombre )&lt;br /&gt;
		if result == &amp;#039;&amp;#039; then&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		elseif not result:match( &amp;#039;^%-?[%d., ]*%d$&amp;#039; ) then&lt;br /&gt;
			return nombre&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- suppression espaces&lt;br /&gt;
	result = result:gsub( &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	-- gestion des points et des virgules&lt;br /&gt;
	if result:match( &amp;#039;[.,]&amp;#039; ) then&lt;br /&gt;
		if result:match( &amp;#039;%d%.%d%d%d%.%d&amp;#039; ) then&lt;br /&gt;
			-- type 12.345.678&lt;br /&gt;
			result = result:gsub( &amp;#039;%.&amp;#039;, &amp;#039;&amp;#039; ):gsub( &amp;#039;,&amp;#039;, &amp;#039;.&amp;#039; )&lt;br /&gt;
		elseif result:match( &amp;#039;%d,%d%d%d,%d&amp;#039; ) -- type 1,234,567 ou 1.234,567,8&lt;br /&gt;
			or result:match( &amp;#039;%d,%d%d%d%.%d&amp;#039; )  -- format anglo-saxon type 1,234.5&lt;br /&gt;
			or result:match( &amp;#039;%d%.%d%d%d,%d&amp;#039; ) -- type 1.123,56 (utilisé en exemple pour sépararer les décimales avec l&amp;#039;ancien modèle unité ou formatnum)&lt;br /&gt;
		then&lt;br /&gt;
			result = result:gsub( &amp;#039;,&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
		else&lt;br /&gt;
			result = result:gsub( &amp;#039;,&amp;#039;, &amp;#039;.&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- _formantNum transforme un nombre ou une chaine représentant un nombre en chaine formatée suivant les conventions du français&lt;br /&gt;
-- si le paramètre ne représente pas un nombre lua il est retourné sans modification&lt;br /&gt;
-- Le paramètre peut être transmis sous forme de table pour ajouter des options :&lt;br /&gt;
-- * round : arrondi à n chiffre après la virgule (peut être négatif)&lt;br /&gt;
-- * decimals : nombre de décimales affichées (peut être négatif, dans ce cas équivalent à round)&lt;br /&gt;
-- * noHtml : n&amp;#039;utilise pas de balise HTML pour affiché les puissance de 10 (pour pouvoir être utilisé en title)&lt;br /&gt;
function p.formatNum( num )&lt;br /&gt;
	local params = {}&lt;br /&gt;
	if type( num ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		params = num&lt;br /&gt;
		num = params[1]&lt;br /&gt;
	end&lt;br /&gt;
	if type( num ) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		num = tostring( num )&lt;br /&gt;
	elseif type( num ) ~= &amp;#039;string&amp;#039; or num == &amp;#039;&amp;#039; then&lt;br /&gt;
		return num&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- séparation exposant&lt;br /&gt;
	local n, exponent = num:match( &amp;#039;^([-%d.]+)[eE]([+-]?%d+)$&amp;#039; )&lt;br /&gt;
	if exponent then&lt;br /&gt;
		num = n&lt;br /&gt;
		if params.noHtml then&lt;br /&gt;
			exponent = exponent:gsub(&amp;#039;+?%f[%d]0&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
				:gsub( &amp;#039;[%d-]&amp;#039;, supUnicode )&lt;br /&gt;
		else&lt;br /&gt;
			exponent = &amp;#039;&amp;lt;sup&amp;gt;&amp;#039; .. exponent:gsub(&amp;#039;^%+?(%-?)0?&amp;#039;, { [&amp;#039;-&amp;#039;] = &amp;#039;−&amp;#039;, [&amp;#039;&amp;#039;] = &amp;#039;&amp;#039; } ) .. &amp;#039;&amp;lt;/sup&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		exponent = &amp;#039; ×10&amp;#039; .. exponent&lt;br /&gt;
	else&lt;br /&gt;
		exponent = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- arrondi&lt;br /&gt;
	local decimals = tonumber( params.decimals )&lt;br /&gt;
	local round = tonumber( params.round ) or decimals&lt;br /&gt;
	if round and tonumber( num ) then&lt;br /&gt;
		local mult = 10 ^ round&lt;br /&gt;
		num = tostring( math.floor( num * mult + 0.5 ) / mult )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local moins, entier, fraction = num:match( &amp;#039;^(%-?)(%d*)%.?(%d*)$&amp;#039; )&lt;br /&gt;
	if not entier then&lt;br /&gt;
		return num&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if moins == &amp;#039;-&amp;#039; then&lt;br /&gt;
		moins = &amp;#039;−&amp;#039; -- signe moins (U+2212)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if entier == &amp;#039;&amp;#039; then&lt;br /&gt;
		entier = &amp;#039;0&amp;#039;&lt;br /&gt;
	elseif entier:len() &amp;gt; 3 then&lt;br /&gt;
		local ini = math.fmod( entier:len() - 1, 3 ) + 1&lt;br /&gt;
		entier = ( entier:sub( 1, ini ) or &amp;#039;&amp;#039;) .. entier:sub( ini + 1 ):gsub( &amp;#039;(%d%d%d)&amp;#039;, &amp;#039;\194\160%1&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if fraction ~= &amp;#039;&amp;#039; or ( decimals and decimals &amp;gt; 0 ) then&lt;br /&gt;
		if decimals and decimals &amp;gt; #fraction then&lt;br /&gt;
			fraction = fraction .. string.rep( &amp;#039;0&amp;#039;, decimals - #fraction )&lt;br /&gt;
		end&lt;br /&gt;
		if #fraction &amp;gt; 3 then&lt;br /&gt;
			fraction = &amp;#039;,&amp;#039; .. fraction:gsub( &amp;#039;(%d%d%d)&amp;#039;, &amp;#039;%1\194\160&amp;#039; ):gsub( &amp;#039;\194\160$&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
		else&lt;br /&gt;
			fraction = &amp;#039;,&amp;#039; .. fraction&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return moins .. entier .. fraction .. exponent&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- formatNombre transforme un nombre formaté ou non en chaine formatée suivant les convention du français.&lt;br /&gt;
-- si la chaine n&amp;#039;est pas reconnu comme un nombre, elle n&amp;#039;est pas modifiée.&lt;br /&gt;
function p.formatNombre( num, round, decimals )&lt;br /&gt;
	return p.formatNum{ p.parseNombre( num ), round = round, decimals = decimals }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- formatNombres transforme tous les nombres d&amp;#039;une chaine en nombre formaté suivant les conventions du français.&lt;br /&gt;
function p.formatNombres( nombres, round, decimals )&lt;br /&gt;
	if type( nombres ) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		return p.formatNum( nombres, round, decimals )&lt;br /&gt;
	elseif type( nombres ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		-- retire les chiffres des strip marker&lt;br /&gt;
		local strip, i = {}, 0&lt;br /&gt;
		nombres = nombres:gsub(&lt;br /&gt;
			&amp;#039;UNIQ%-%-%a+%-%x%x%x%x%x%x%x%x%-QINU&amp;#039;,&lt;br /&gt;
			function ( marker )&lt;br /&gt;
				i = i + 1&lt;br /&gt;
				strip[ tostring( i ) ] = marker&lt;br /&gt;
				return &amp;#039;UNIQ^&amp;#039; .. i .. &amp;#039;¤QINU&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		)&lt;br /&gt;
		--  formatage proprement dit&lt;br /&gt;
		nombres = p.sanitizeNum( nombres )&lt;br /&gt;
		local formatN = function ( n )&lt;br /&gt;
			return p.formatNombre( n, round, decimals )&lt;br /&gt;
		end&lt;br /&gt;
		nombres = nombres&lt;br /&gt;
			:gsub( &amp;#039;%-?%f[%d.,][%d., ]*%de[+-]?%d+&amp;#039;, formatN )&lt;br /&gt;
			:gsub( &amp;#039;%-?%f[%d.,][%d., ]*%d&amp;#039;, formatN )&lt;br /&gt;
&lt;br /&gt;
		-- réintroduction des strip marker&lt;br /&gt;
		nombres = nombres:gsub( &amp;#039;UNIQ^(%d+)¤QINU&amp;#039;, strip )&lt;br /&gt;
		return nombres&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.parseUnit( texte )&lt;br /&gt;
	local toParse = p.sanitizeNum( texte )&lt;br /&gt;
	if toParse ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local result&lt;br /&gt;
		local specificArgs = {&lt;br /&gt;
			[&amp;#039;à&amp;#039;] = &amp;#039;à&amp;#039;,&lt;br /&gt;
			et = &amp;#039;et&amp;#039;,&lt;br /&gt;
			ou = &amp;#039;ou&amp;#039;,&lt;br /&gt;
			[&amp;#039;/&amp;#039;] = &amp;#039;/&amp;#039;,&lt;br /&gt;
			[&amp;#039;–&amp;#039;] = &amp;#039;–&amp;#039;, [&amp;#039;-&amp;#039;] = &amp;#039;–&amp;#039;, -- demi cadratin et tiret&lt;br /&gt;
			[&amp;#039;±&amp;#039;] = &amp;#039;±&amp;#039;, [&amp;#039;+-&amp;#039;] = &amp;#039;±&amp;#039;, [&amp;#039;+/-&amp;#039;] = &amp;#039;±&amp;#039;,&lt;br /&gt;
			[&amp;#039;+&amp;#039;] = &amp;#039;+&amp;#039;,&lt;br /&gt;
			[&amp;#039;−&amp;#039;] = &amp;#039;−&amp;#039;, -- signe moins&lt;br /&gt;
			[&amp;#039;×&amp;#039;] = &amp;#039;×&amp;#039;, x = &amp;#039;×&amp;#039;, [&amp;#039;*&amp;#039;] = &amp;#039;×&amp;#039;,&lt;br /&gt;
			[&amp;#039;××&amp;#039;] = &amp;#039;××&amp;#039;, xx = &amp;#039;××&amp;#039;, [&amp;#039;**&amp;#039;] = &amp;#039;××&amp;#039;,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		-- valeur numérique&lt;br /&gt;
		local match, capture = toParse:match( &amp;#039;^(([%d., ]+%f[^d%(])%s*)&amp;#039; )&lt;br /&gt;
		local prefix&lt;br /&gt;
		if not match then&lt;br /&gt;
			-- cas ou le nombre est remplcé par un ou plusieurs points d&amp;#039;interrogation&lt;br /&gt;
			match, prefix = toParse:match( &amp;#039;^((%?+)%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if not match then&lt;br /&gt;
			-- cas ou un mot type &amp;quot;vers&amp;quot;, &amp;quot;environ&amp;quot; précède le nombre (mot simple, sans accent pour ne pas complexifier pour des cas minoritaires)&lt;br /&gt;
			match, prefix, capture = toParse:match( &amp;#039;^(([%a]+[.,]?[: ]* )([+-]?%f[%d.,][%d., ]*%d%f[%D])%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if not match then&lt;br /&gt;
			-- cas ou le nombre est précédé par un signe, un symbole ASCII, ou suivit d&amp;#039;une incerititude entre parenthèse&lt;br /&gt;
			match, prefix, capture = toParse:match( &amp;#039;^(([(&amp;lt;&amp;gt;=~ ]*)([+-]?%f[%d.,][%d., ]*%d%(?%d*%)?)%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if not match then&lt;br /&gt;
			-- cas ou le nombre est précédé par un symbole ≤, ≥ ou ≈&lt;br /&gt;
			match, prefix, capture = toParse:match( &amp;#039;^((\226\137[\164\165\136] ?)([+-]?%f[%d.,][%d., ]*%d%f[%D])%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		result = { capture or false, prefix = prefix }&lt;br /&gt;
		if match then&lt;br /&gt;
			toParse = toParse:sub( match:len() + 1 )&lt;br /&gt;
&lt;br /&gt;
			-- point de suspensions (ex π = 3.14159...)&lt;br /&gt;
			match = toParse:match( &amp;#039;^…%s*&amp;#039; )&lt;br /&gt;
			if not match then&lt;br /&gt;
				match, capture = toParse:match( &amp;#039;^%.%.%.%s*&amp;#039; )&lt;br /&gt;
			end&lt;br /&gt;
			if match then&lt;br /&gt;
				result[1] = result[1] .. &amp;#039;…&amp;#039;&lt;br /&gt;
				toParse = toParse:sub( match:len() + 1 )&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- fraction&lt;br /&gt;
			match, capture = toParse:match( &amp;#039;^((%d*/%d+)%s*)&amp;#039; )&lt;br /&gt;
			if not match then&lt;br /&gt;
				match, capture = toParse:match( &amp;#039;^((\194[\188-\190])%s*)&amp;#039; ) -- ¼ à ¾&lt;br /&gt;
			end&lt;br /&gt;
			if not match then&lt;br /&gt;
				match, capture = toParse:match( &amp;#039;^((\226\133[\144-\158])%s*)&amp;#039; ) -- ⅐ à ⅞&lt;br /&gt;
			end&lt;br /&gt;
			if match then&lt;br /&gt;
				if capture:match( &amp;#039;^/&amp;#039; ) then&lt;br /&gt;
					local n = result[1]:match( &amp;#039; %d+$&amp;#039; ) or result[1]:match( &amp;#039;^%d+$&amp;#039; )  or &amp;#039;&amp;#039;&lt;br /&gt;
					result[1] = result[1]:sub( 1, -1 - #n )&lt;br /&gt;
					result.fraction = n:gsub( &amp;#039;^ &amp;#039;, &amp;#039;&amp;#039; ) .. capture&lt;br /&gt;
				else&lt;br /&gt;
					result.fraction = capture&lt;br /&gt;
				end&lt;br /&gt;
				toParse = toParse:sub( match:len() + 1 )&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- lien avec un deuxième nombre&lt;br /&gt;
			local match2, conj, num = mw.ustring.match( toParse, &amp;#039;^(([àetouM+/−x*×±–-]+) ?(%-?%f[%d.,][%d., ]*%d%f[%D]%)?)%s*)&amp;#039; )&lt;br /&gt;
			if match2 and specificArgs[ conj ]&lt;br /&gt;
				and not ( specificArgs[ conj ] == &amp;#039;×&amp;#039; and mw.ustring.match( toParse, &amp;#039;^[×x] ?10 ?e&amp;#039;) ) then&lt;br /&gt;
				result[ specificArgs[ conj ] ] = num&lt;br /&gt;
				toParse = toParse:sub( match2:len() + 1 )&lt;br /&gt;
			end&lt;br /&gt;
			if result[&amp;#039;+&amp;#039;] or result[&amp;#039;×&amp;#039;] then&lt;br /&gt;
				match2, conj, num = mw.ustring.match( toParse, &amp;#039;^(([x*×−-]) ?(%-?%f[%d.,][%d., ]*%d%f[%D])%s*)&amp;#039; )&lt;br /&gt;
				if match2 then&lt;br /&gt;
					if specificArgs[ conj ] == &amp;#039;×&amp;#039; then&lt;br /&gt;
						result[&amp;#039;××&amp;#039;] = num&lt;br /&gt;
					else&lt;br /&gt;
						result[&amp;#039;−&amp;#039;] = num&lt;br /&gt;
					end&lt;br /&gt;
					toParse = toParse:sub( match2:len() + 1 )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- 10 exposant   ( \195\151 = ×, signe multiplié)&lt;br /&gt;
		match, capture = toParse:match( &amp;#039;^(%s*e(%-?%d+)%s*)&amp;#039; )&lt;br /&gt;
		if not match then&lt;br /&gt;
			match, capture = toParse:match( &amp;#039;^(%s*[x\195]\151?10e(%-?%d+)%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if match then&lt;br /&gt;
			result.e = capture&lt;br /&gt;
			toParse = toParse:sub( match:len() + 1 )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- unités&lt;br /&gt;
		if Data.unit[ toParse ] or mw.ustring.match( toParse, &amp;#039;^%a+$&amp;#039; ) or toParse:match( &amp;#039;%b&amp;lt;&amp;gt;&amp;#039; ) then&lt;br /&gt;
			table.insert( result, toParse )&lt;br /&gt;
			toParse = &amp;#039;&amp;#039;&lt;br /&gt;
		elseif toParse ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local unit, exp&lt;br /&gt;
			toParse = toParse:gsub( &amp;#039;²&amp;#039;, &amp;#039;2&amp;#039; ):gsub( &amp;#039;³&amp;#039;, &amp;#039;3&amp;#039; )&lt;br /&gt;
			repeat&lt;br /&gt;
				-- unité contenant un lien&lt;br /&gt;
				match, unit, exp = mw.ustring.match( toParse, &amp;#039;^((/?[^%s%d/%[%]]*%b[][^%s%d/]*) ?(%-?%d*)%s*)&amp;#039; )&lt;br /&gt;
				if not match then&lt;br /&gt;
					-- unité ne contenant pas de lien&lt;br /&gt;
					match, unit, exp = mw.ustring.match( toParse, &amp;#039;^((/?[^%s%d/]+) ?(%-?%d*)%s*)&amp;#039; )&lt;br /&gt;
				end&lt;br /&gt;
				if not match then&lt;br /&gt;
					-- l/100 km&lt;br /&gt;
					match, unit, exp = mw.ustring.match( toParse, &amp;#039;^((/100 ?[^%s%d/]+) ?(%-?%d*)%s*)&amp;#039; )&lt;br /&gt;
				end&lt;br /&gt;
				if match then&lt;br /&gt;
					if unit:match( &amp;#039;%-$&amp;#039; ) and exp ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						unit = unit:gsub( &amp;#039;%-$&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
						exp = &amp;#039;-&amp;#039; .. exp&lt;br /&gt;
					elseif exp == &amp;#039;-&amp;#039; then&lt;br /&gt;
						unit = match&lt;br /&gt;
						exp = &amp;#039;&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
					if Data.unit[ unit ] or mw.ustring.match( unit, &amp;#039;[%a€£$«»]&amp;#039; ) then&lt;br /&gt;
						table.insert( result, unit )&lt;br /&gt;
						table.insert( result, exp )&lt;br /&gt;
						toParse = toParse:sub( match:len() + 1 )&lt;br /&gt;
					else&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			until toParse == &amp;#039;&amp;#039; or not match&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if toParse == &amp;#039;&amp;#039; then&lt;br /&gt;
			if #result &amp;gt; 1 and result[ #result ] == &amp;#039;&amp;#039; then&lt;br /&gt;
				result[ #result ] = nil&lt;br /&gt;
			end&lt;br /&gt;
			return result&lt;br /&gt;
		else&lt;br /&gt;
			-- une partie de la chaine n&amp;#039;a pas pu être décodée, on retourne la chaine originale&lt;br /&gt;
			addErrorCat = true&lt;br /&gt;
			return { texte }&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return { }&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- nomUtnit retourne le nom français du code d&amp;#039;une unité et de son exposant.&lt;br /&gt;
-- si le code de l&amp;#039;unité n&amp;#039;est pas reconnu retourne 1 et false, de façon à ajouter false en première position d&amp;#039;une table.&lt;br /&gt;
function p.nomUnit( unit, exposant )&lt;br /&gt;
	if not dataSuccess or type( unit ) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
		return 1, false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- nettoyage des liens et balise HTML&lt;br /&gt;
	unit = unit:gsub( &amp;#039;^/&amp;#039; , &amp;#039;&amp;#039; )&lt;br /&gt;
	if unit:match( &amp;#039;%[&amp;#039; ) then&lt;br /&gt;
		local Delink = require( &amp;#039;Module:Delink&amp;#039; )&lt;br /&gt;
		unit = Delink._delink{ unit }&lt;br /&gt;
	end&lt;br /&gt;
	if unit:match( &amp;#039;&amp;lt;&amp;#039; ) then&lt;br /&gt;
		unit = unit:gsub( &amp;#039;%b&amp;lt;&amp;gt;&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- récupère le nom de l&amp;#039;unité&lt;br /&gt;
	local unitTab = Data.unit[ unit ]&lt;br /&gt;
	local unitPrefix = { nom = &amp;#039;&amp;#039; }&lt;br /&gt;
	if not unitTab then&lt;br /&gt;
		unitTab = Data.unit[ unit:sub( 2 ) ]&lt;br /&gt;
		unitPrefix = Data.prefix[ unit:sub( 1, 1 ) ]&lt;br /&gt;
		if not ( unitTab and unitPrefix ) then&lt;br /&gt;
			-- pour µ, Ki, Mi, Gi... qui sont codé sur deux octets&lt;br /&gt;
			unitTab = Data.unit[ unit:sub( 3 ) ]&lt;br /&gt;
			unitPrefix = Data.prefix[ unit:sub( 1, 2 ) ]&lt;br /&gt;
			if not ( unitTab and unitPrefix ) then&lt;br /&gt;
				unitTab = false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- récupère le nom de l&amp;#039;exposant&lt;br /&gt;
	if trim( exposant ) then&lt;br /&gt;
		local exp = tonumber( exposant )&lt;br /&gt;
		exp = exp and Data.exposant[ math.abs( exp ) ]&lt;br /&gt;
		exposant = exp or &amp;#039; puissance &amp;#039; .. exposant&lt;br /&gt;
	else&lt;br /&gt;
		exposant = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- assemble les deux partie&lt;br /&gt;
	if type( unitTab ) == &amp;#039;table&amp;#039; and type( unitTab.nom ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return unitPrefix.nom .. unitTab.nom .. exposant&lt;br /&gt;
	elseif unit:match( &amp;#039;[/%d]&amp;#039; ) then&lt;br /&gt;
		-- ce n&amp;#039;est pas du texte simple, on anule l&amp;#039;infobule&lt;br /&gt;
		return 1, false&lt;br /&gt;
	else&lt;br /&gt;
		return unit .. exposant&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._unite( args )&lt;br /&gt;
	-- remplacement de certains caractères, pour simplifier les pattern&lt;br /&gt;
	local nombre = p.sanitizeNum( args[1] )&lt;br /&gt;
	if nombre == &amp;#039;&amp;#039; then&lt;br /&gt;
		nombre = nil&lt;br /&gt;
	else&lt;br /&gt;
		-- formatage du nombre&lt;br /&gt;
		nombre = p.formatNombres( nombre, args.arrondi, args[&amp;#039;décimales&amp;#039;] )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local wiki = { args.prefix or &amp;#039;&amp;#039;, nombre }   -- prefix est un paramètre interne défini par p.parseUnit, utile notamment lorsque {{unité}} est utilisé dans les infobox&lt;br /&gt;
&lt;br /&gt;
	-- fraction&lt;br /&gt;
	if args.fraction then&lt;br /&gt;
		local nom, den = args.fraction:match( &amp;#039;^(.-)/(.+)$&amp;#039; )&lt;br /&gt;
		if nom then&lt;br /&gt;
			if nom:match( &amp;#039;^[ %dn()=+-]+$&amp;#039; ) and den:match( &amp;#039;^[ %daeoxhklmnpst()=+-]$&amp;#039; ) then&lt;br /&gt;
				nom = nom:gsub( &amp;#039;[%dn()=+-]&amp;#039;, supUnicode )&lt;br /&gt;
				den = den:gsub( &amp;#039;[%daeoxhklmnpst()=+-]&amp;#039;, subUnicode )&lt;br /&gt;
			else&lt;br /&gt;
				nom = &amp;#039;&amp;lt;sup style=&amp;quot;font-size: 70%; vertical-align: 0.4em;&amp;quot;&amp;gt;&amp;#039; .. nom .. &amp;#039;&amp;lt;/sup&amp;gt;&amp;#039;&lt;br /&gt;
				den = &amp;#039;&amp;lt;sub style=&amp;quot;font-size: 70%; vertical-align: 0em;&amp;quot;&amp;gt;&amp;#039; .. den .. &amp;#039;&amp;lt;/sub&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			args.fraction = nom .. &amp;#039;⁄&amp;#039; .. den&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if nombre then&lt;br /&gt;
			table.insert( wiki, &amp;#039;\194\160&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		table.insert( wiki, args.fraction )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- à, et, ou, ×, – (tiret cadratin)&lt;br /&gt;
	local specificArgs = { &amp;#039;–&amp;#039;, &amp;#039;à&amp;#039;, &amp;#039;et&amp;#039;, &amp;#039;ou&amp;#039;, &amp;#039;/&amp;#039;, &amp;#039;×&amp;#039;, &amp;#039;××&amp;#039;, &amp;#039;±&amp;#039;	}&lt;br /&gt;
	for _, name in ipairs( specificArgs ) do&lt;br /&gt;
		local v = trim( args[ name ] )&lt;br /&gt;
		if v then&lt;br /&gt;
			v = p.formatNombres( v )&lt;br /&gt;
			if name == &amp;#039;–&amp;#039; and nombre and nombre:match( &amp;#039;^[^−]&amp;#039; ) and v:match( &amp;#039;^[^−]&amp;#039; ) then&lt;br /&gt;
				-- pas d&amp;#039;espace pour le tiret cadratin entre deux nombres positifs&lt;br /&gt;
				table.insert( wiki, &amp;#039;–&amp;#039; )&lt;br /&gt;
			elseif name == &amp;#039;/&amp;#039; then&lt;br /&gt;
				-- espace demi-cadratin (U+2002 ou &amp;amp;ensp;) avec /&lt;br /&gt;
				table.insert( wiki, &amp;#039; / &amp;#039; )&lt;br /&gt;
			elseif name == &amp;#039;××&amp;#039; then&lt;br /&gt;
				table.insert( wiki, &amp;#039;\194\160×\194\160&amp;#039; )&lt;br /&gt;
			elseif name == &amp;#039;×&amp;#039; or name == &amp;#039;±&amp;#039; then&lt;br /&gt;
				table.insert( wiki, &amp;#039;\194\160&amp;#039; .. name .. &amp;#039;\194\160&amp;#039; )&lt;br /&gt;
			else&lt;br /&gt;
				table.insert( wiki, &amp;#039; &amp;#039; .. name .. &amp;#039; &amp;#039; )&lt;br /&gt;
			end&lt;br /&gt;
			table.insert( wiki, v )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- analyse de l&amp;#039;unité pour la conversion (mais ne sera affiché qu&amp;#039;après l&amp;#039;incertitude + et - séparé&lt;br /&gt;
	local i = 1&lt;br /&gt;
	local unit = trim( args[ 2 * i ] )&lt;br /&gt;
	local units = &amp;#039;&amp;#039;&lt;br /&gt;
	local nomUnits, par = {}, false&lt;br /&gt;
	while unit do&lt;br /&gt;
		local exp = p.parseNombre( args[ 2 * i + 1 ] )&lt;br /&gt;
		local sep = &amp;#039;&amp;#039;&lt;br /&gt;
		-- gestion des exposants&lt;br /&gt;
		local expUnit = &amp;#039;&amp;#039;&lt;br /&gt;
		if exp == &amp;#039;&amp;#039; then&lt;br /&gt;
			if unit:sub( -2 ) == &amp;#039;²&amp;#039; then&lt;br /&gt;
				exp = &amp;#039;2&amp;#039;&lt;br /&gt;
				unit = unit:sub( 1, -3 )&lt;br /&gt;
			elseif unit:sub( -2 ) == &amp;#039;³&amp;#039; then&lt;br /&gt;
				exp = &amp;#039;3&amp;#039;&lt;br /&gt;
				unit = unit:sub( 1, -3 )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if #exp &amp;gt; 0 then&lt;br /&gt;
			expUnit = &amp;#039;&amp;lt;sup&amp;gt;&amp;#039; .. exp:gsub( &amp;#039;^-&amp;#039;, &amp;#039;−&amp;#039;) .. &amp;#039;&amp;lt;/sup&amp;gt;&amp;#039;  -- remplace le tiret par un vrai signe moins&lt;br /&gt;
		end&lt;br /&gt;
		-- gestion de la séparation des unités et des unités en dénominateur&lt;br /&gt;
		if units ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			if unit:sub( 1, 1 ) == &amp;#039;/&amp;#039; then&lt;br /&gt;
				sep = &amp;#039;/&amp;#039;&lt;br /&gt;
				unit = unit:sub( 2 )&lt;br /&gt;
				if not par then&lt;br /&gt;
					par = true&lt;br /&gt;
					table.insert( nomUnits, &amp;#039;par&amp;#039; )&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				sep = &amp;#039;\194\160&amp;#039;  -- point médian désactivé : &amp;#039;⋅\194\160&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if exp:match( &amp;#039;^-&amp;#039; ) and not par then&lt;br /&gt;
			par = true&lt;br /&gt;
			table.insert( nomUnits, &amp;#039;par&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		-- remplacement de l&amp;#039;unité par son symbole&lt;br /&gt;
		if Data.unit[ unit ] then&lt;br /&gt;
			-- unit = Data.unit[ unit ].symbole&lt;br /&gt;
			-- désactivé car ne gère pas les multiple tel mL&lt;br /&gt;
		end&lt;br /&gt;
		units = units .. sep .. unit .. expUnit&lt;br /&gt;
		table.insert( nomUnits, p.nomUnit( unit, exp ) )&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		unit = trim( args[ 2 * i ] )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- conversion&lt;br /&gt;
	local unitNameString = nomUnits[1] and table.concat( nomUnits, &amp;#039; &amp;#039; ) or &amp;#039;&amp;#039;&lt;br /&gt;
	unitNameString = mw.ustring.gsub( unitNameString, &amp;#039;(%a)s%f[%A]&amp;#039;, &amp;#039;%1&amp;#039; )&lt;br /&gt;
	local multiple = 1&lt;br /&gt;
	local convertTable = Data.convert[ unitNameString ]&lt;br /&gt;
	if not convertTable and #unitNameString &amp;gt; 5 then&lt;br /&gt;
		-- gesion des multiples (Kilo, méga, mili...)&lt;br /&gt;
		local prefix = Data.prefix[ unitNameString:sub( 1, 4 ) ] or Data.prefix[ unitNameString:sub( 1, 5 ) ]&lt;br /&gt;
		local _, par = unitNameString:find( &amp;#039; par &amp;#039; )&lt;br /&gt;
		local prefix2&lt;br /&gt;
		if par then&lt;br /&gt;
			prefix2 = Data.prefix[ unitNameString:sub( par + 1, 4 ) ] or Data.prefix[ unitNameString:sub( par + 1, 5 ) ]&lt;br /&gt;
		end&lt;br /&gt;
		if prefix and Data.convert[ unitNameString:gsub( &amp;#039;^&amp;#039; .. prefix.nom, &amp;#039;&amp;#039; ) ] then&lt;br /&gt;
			convertTable = Data.convert[ unitNameString:gsub( &amp;#039;^&amp;#039; .. prefix.nom, &amp;#039;&amp;#039; ) ]&lt;br /&gt;
			multiple = 10 ^ prefix.puissance&lt;br /&gt;
		elseif prefix2 and  Data.convert[ unitNameString:gsub( &amp;#039; par &amp;#039; .. prefix2.nom, &amp;#039;&amp;#039; ) ] then&lt;br /&gt;
			convertTable = Data.convert[ unitNameString:gsub( &amp;#039; par &amp;#039; .. prefix2.nom, &amp;#039;&amp;#039; ) ]&lt;br /&gt;
			multiple = 1 / 10 ^ prefix2.puissance&lt;br /&gt;
		elseif prefix and prefix2 and Data.convert[ unitNameString:gsub( &amp;#039;^&amp;#039; .. prefix.nom, &amp;#039;&amp;#039; ):gsub( &amp;#039; par &amp;#039; .. prefix2.nom, &amp;#039;&amp;#039; ) ] then&lt;br /&gt;
			convertTable = Data.convert[ unitNameString:gsub( &amp;#039;^&amp;#039; .. prefix.nom, &amp;#039;&amp;#039; ):gsub( &amp;#039; par &amp;#039; .. prefix2.nom, &amp;#039;&amp;#039; ) ]&lt;br /&gt;
			multiple = 10 ^ prefix.puissance / 10 ^ prefix2.puissance&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if convertTable then&lt;br /&gt;
		if type( convertTable[1] ) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
			convertTable = { convertTable }&lt;br /&gt;
		end&lt;br /&gt;
		for i, v in ipairs( wiki ) do&lt;br /&gt;
			local n = tonumber( p.parseNombre( v ) )&lt;br /&gt;
			if n then&lt;br /&gt;
				n = n * 10 ^ ( tonumber( p.parseNombre( args.e ) ) or 0 )&lt;br /&gt;
				local converted = {}&lt;br /&gt;
				for _, c in ipairs( convertTable ) do&lt;br /&gt;
					local nConverted = n&lt;br /&gt;
					if c.inverse then&lt;br /&gt;
						nConverted = 1 / n&lt;br /&gt;
					end&lt;br /&gt;
					if c.M then&lt;br /&gt;
						-- M = masse molaire&lt;br /&gt;
						local M = tonumber( args.M )&lt;br /&gt;
						if not M then&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
						if c.M == &amp;#039;*&amp;#039; then&lt;br /&gt;
							nConverted = nConverted * M&lt;br /&gt;
						elseif c.M == &amp;#039;/&amp;#039; then&lt;br /&gt;
							nConverted = nConverted / M&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					nConverted = nConverted * multiple * c[2] + ( c[3] or 0 )&lt;br /&gt;
					-- format&lt;br /&gt;
					nConverted = p.formatNum{ nConverted, round = c.round or 6, noHtml = true }&lt;br /&gt;
					local sep = &amp;#039; &amp;#039;&lt;br /&gt;
					if mw.ustring.sub( c[1], 1, 1 ) == &amp;#039;°&amp;#039; then&lt;br /&gt;
						sep = &amp;#039;&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
					mw.log( c[1], mw.ustring.codepoint( sep, 1, 1))&lt;br /&gt;
					table.insert( converted, nConverted .. sep.. c[1] )&lt;br /&gt;
				end&lt;br /&gt;
				wiki[ i ] = &amp;#039;&amp;lt;span title=&amp;quot;&amp;#039; .. table.concat( converted, &amp;#039; ou &amp;#039; ) ..&amp;#039;&amp;quot;&amp;gt;&amp;#039; .. v ..&amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- incertitude avec + et − séparés&lt;br /&gt;
	if trim( args[&amp;#039;+&amp;#039;] ) then&lt;br /&gt;
		local approximation = &amp;#039;+&amp;#039; .. p.formatNombre( args[&amp;#039;+&amp;#039;] ) .. &amp;#039;&amp;#039;&lt;br /&gt;
		if trim( args[&amp;#039;−&amp;#039;] ) then&lt;br /&gt;
			approximation = approximation .. &amp;#039;&amp;lt;br&amp;gt; −&amp;#039; .. p.formatNombre( args[&amp;#039;−&amp;#039;] )&lt;br /&gt;
		end&lt;br /&gt;
		table.insert( wiki, &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block; padding-left:0.2em; vertical-align:top; line-height:1em; font-size:80%; text-align:left;&amp;quot;&amp;gt;&amp;#039; )&lt;br /&gt;
		table.insert( wiki, approximation .. &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- puissance de 10&lt;br /&gt;
	local exposant = trim( args.e )&lt;br /&gt;
	if exposant then&lt;br /&gt;
		exposant = p.formatNombre( exposant )&lt;br /&gt;
		if nombre then&lt;br /&gt;
			if trim( args[&amp;#039;±&amp;#039;] ) and not nombre:match( &amp;#039;^%(&amp;#039; ) then&lt;br /&gt;
				table.insert( wiki, 1, &amp;#039;(&amp;#039; )&lt;br /&gt;
				table.insert( wiki, &amp;#039;)&amp;#039; )&lt;br /&gt;
			end&lt;br /&gt;
			table.insert( wiki, &amp;#039;\194\160× 10&amp;lt;sup&amp;gt;&amp;#039; .. exposant .. &amp;#039;&amp;lt;/sup&amp;gt;&amp;#039; )&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( wiki, &amp;#039;10&amp;lt;sup&amp;gt;&amp;#039; .. exposant .. &amp;#039;&amp;lt;/sup&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if units ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local sep = &amp;#039;\194\160&amp;#039;&lt;br /&gt;
		if not ( nombre or args.fraction or exposant ) then&lt;br /&gt;
			sep = &amp;#039;&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			local symbole = Data.unit[ units ] and Data.unit[ units ].symbole&lt;br /&gt;
			if symbole == &amp;#039;°&amp;#039; or symbole == &amp;#039;′&amp;#039; or symbole == &amp;#039;″&amp;#039; then&lt;br /&gt;
				sep = &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- ajoute une abréviation si le nom de l&amp;#039;unité est différent de l&amp;#039;unité (en retirant les espaces qui peuvent être devenus insécables)&lt;br /&gt;
		if nomUnits[1] and table.concat( nomUnits ):gsub( &amp;#039; &amp;#039;, &amp;#039;&amp;#039; ):gsub( &amp;#039;\194\160&amp;#039;, &amp;#039;&amp;#039; ) ~= units:gsub( &amp;#039; &amp;#039;, &amp;#039;&amp;#039; ):gsub( &amp;#039;\194\160&amp;#039;, &amp;#039;&amp;#039; ) then&lt;br /&gt;
			units = string.format( &amp;#039;&amp;lt;abbr class=abbr title=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/abbr&amp;gt;&amp;#039;, table.concat( nomUnits, &amp;#039; &amp;#039; ), units )&lt;br /&gt;
		end&lt;br /&gt;
		table.insert( wiki, sep .. units )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #wiki &amp;gt; 0 then&lt;br /&gt;
		return table.concat( wiki )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.unite( frame )&lt;br /&gt;
	local args&lt;br /&gt;
	if type( frame ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		if type( frame.getParent ) == &amp;#039;function&amp;#039; then&lt;br /&gt;
			args = frame:getParent().args;&lt;br /&gt;
		else&lt;br /&gt;
			args = frame&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if args then&lt;br /&gt;
		args[1] = trim( args[1] ) or false&lt;br /&gt;
		if args[1] then&lt;br /&gt;
			if args[1]:match(&amp;#039;[^%d,. -]&amp;#039;) then&lt;br /&gt;
				local tempArgs = p.parseUnit( args[1] )&lt;br /&gt;
				if not ( args[2] and tempArgs[2] ) then&lt;br /&gt;
					for k, v in pairs( tempArgs ) do&lt;br /&gt;
						args[k] = v&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			args[2] = trim( args[2] ) or false&lt;br /&gt;
			if args[2] and not args[3] and args[2]:match(&amp;#039;/&amp;#039;) then&lt;br /&gt;
				local tempArgs = p.parseUnit( args[2] )&lt;br /&gt;
				args[2] = false&lt;br /&gt;
				if tempArgs[1] ~= false then&lt;br /&gt;
					table.insert( tempArgs, 1, false )&lt;br /&gt;
				end&lt;br /&gt;
				for k, v in pairs( tempArgs ) do&lt;br /&gt;
					if args[k] and v then&lt;br /&gt;
						addErrorCat = true&lt;br /&gt;
					end&lt;br /&gt;
					args[k] = args[k] or v&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- args alias&lt;br /&gt;
		args[&amp;#039;×&amp;#039;] = args[&amp;#039;×&amp;#039;] or args[&amp;#039;x&amp;#039;]  -- lettre x → signe multiplié&lt;br /&gt;
		args[&amp;#039;±&amp;#039;] = args[&amp;#039;±&amp;#039;] or args[&amp;#039;+-&amp;#039;] or args[&amp;#039;+/-&amp;#039;]&lt;br /&gt;
		if args[&amp;#039;+&amp;#039;] then&lt;br /&gt;
			args[&amp;#039;−&amp;#039;] = args[&amp;#039;−&amp;#039;] or args[&amp;#039;-&amp;#039;] -- tiret → signe moins&lt;br /&gt;
		else&lt;br /&gt;
			args[&amp;#039;–&amp;#039;] = args[&amp;#039;–&amp;#039;] or args[&amp;#039;-&amp;#039;] -- tiret → demi-cadratin&lt;br /&gt;
		end&lt;br /&gt;
		local cat = &amp;#039;&amp;#039;&lt;br /&gt;
		if addErrorCat then&lt;br /&gt;
			cat = errorCat&lt;br /&gt;
		end&lt;br /&gt;
		return p._unite( args ) .. cat&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>modèle&gt;Od1n</name></author>
	</entry>
</feed>