<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://dansunegalaxie.ca/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://dansunegalaxie.ca/index.php?action=history&amp;feed=atom&amp;title=Module%3AUnit%C3%A9"/>
	<link rel="alternate" type="text/html" href="https://dansunegalaxie.ca/index.php?title=Module:Unit%C3%A9&amp;action=history"/>
	<updated>2026-04-04T14:19:45Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://dansunegalaxie.ca/index.php?title=Module:Unit%C3%A9&amp;diff=91&amp;oldid=prev</id>
		<title>Yuki : 1 version importée : Infobox</title>
		<link rel="alternate" type="text/html" href="https://dansunegalaxie.ca/index.php?title=Module:Unit%C3%A9&amp;diff=91&amp;oldid=prev"/>
		<updated>2023-11-15T07:11:03Z</updated>

		<summary type="html">&lt;p&gt;1 version importée : Infobox&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 15 novembre 2023 à 03:11&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key dugwiki:diff::1.12:old-90:rev-91 --&gt;
&lt;/table&gt;</summary>
		<author><name>Yuki</name></author>
	</entry>
	<entry>
		<id>https://dansunegalaxie.ca/index.php?title=Module:Unit%C3%A9&amp;diff=90&amp;oldid=prev</id>
		<title>wikipedia&gt;Od1n : la fonction mw.text.trim() a été optimisée&amp;nbsp;: quand elle est utilisée avec le charset par défaut, elle emploie maintenant le même code qu&#039;ici, voir T338561&amp;nbsp;; je garde pour l&#039;instant le &quot;lookup cache&quot; en variable locale, mais après mesures, la différence semble vraiment très faible</title>
		<link rel="alternate" type="text/html" href="https://dansunegalaxie.ca/index.php?title=Module:Unit%C3%A9&amp;diff=90&amp;oldid=prev"/>
		<updated>2023-11-06T23:19:15Z</updated>

		<summary type="html">&lt;p&gt;la fonction &lt;a href=&quot;https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.text.trim&quot; class=&quot;extiw&quot; title=&quot;mw:Extension:Scribunto/Lua reference manual&quot;&gt;mw.text.trim()&lt;/a&gt; a été optimisée : quand elle est utilisée avec le charset par défaut, elle emploie maintenant le même code qu&amp;#039;ici, voir &lt;a href=&quot;/index.php?title=Phab:T338561&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Phab:T338561 (page inexistante)&quot;&gt;T338561&lt;/a&gt; ; je garde pour l&amp;#039;instant le &amp;quot;lookup cache&amp;quot; en variable locale, mais après mesures, la différence semble vraiment très faible&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- luacheck: globals mw, no max line length&lt;br /&gt;
&lt;br /&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;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;
local fractionUnicode = { [&amp;#039;½&amp;#039;] = &amp;#039;1/2&amp;#039;, [&amp;#039;⅓&amp;#039;] = &amp;#039;1/3&amp;#039;, [&amp;#039;⅕&amp;#039;] = &amp;#039;1/5&amp;#039;, [&amp;#039;⅙&amp;#039;] = &amp;#039;1/6&amp;#039;, [&amp;#039;⅛&amp;#039;] = &amp;#039;1/8&amp;#039;,&lt;br /&gt;
	[&amp;#039;⅔&amp;#039;] = &amp;#039;2/3&amp;#039;, [&amp;#039;⅖&amp;#039;] = &amp;#039;2/5&amp;#039;, [&amp;#039;⅚&amp;#039;] = &amp;#039;5/6&amp;#039;, [&amp;#039;⅜&amp;#039;] = &amp;#039;3/8&amp;#039;, [&amp;#039;¾&amp;#039;] = &amp;#039;3/4&amp;#039;, [&amp;#039;⅗&amp;#039;] = &amp;#039;3/5&amp;#039;,&lt;br /&gt;
	[&amp;#039;⅝&amp;#039;] = &amp;#039;5/8&amp;#039;, [&amp;#039;⅞&amp;#039;] = &amp;#039;7/8&amp;#039;, [&amp;#039;⅘&amp;#039;] = &amp;#039;4/5&amp;#039;, [&amp;#039;¼&amp;#039;] = &amp;#039;1/4&amp;#039;, [&amp;#039;⅐&amp;#039;] = &amp;#039;1/7&amp;#039;, [&amp;#039;⅑&amp;#039;] = &amp;#039;1/9&amp;#039;, [&amp;#039;⅒&amp;#039;] = &amp;#039;1/10&amp;#039;, [&amp;#039;↉&amp;#039;] = &amp;#039;0/3&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
local nbsp = &amp;#039;\194\160&amp;#039;        -- espace insécable&lt;br /&gt;
local nnbsp = &amp;#039;\226\128\175&amp;#039;   -- espace fine insécable&lt;br /&gt;
&lt;br /&gt;
--- Copie de Outils.trim acceptant les nombres.&lt;br /&gt;
local mwTrim = mw.text.trim&lt;br /&gt;
local function trim( texte )&lt;br /&gt;
	if type( texte ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		texte = mwTrim( texte )&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;
-- retire les chiffres des strip markers&lt;br /&gt;
local function escapeStripMarkers( input )&lt;br /&gt;
	return input:gsub( &amp;#039;(UNIQ%-%-%a+%-)(%x%x%x%x%x%x%x%x)(%-QINU)&amp;#039;, function ( leading, hexdigits, trailing )&lt;br /&gt;
		local escapeddigits = hexdigits:gsub( &amp;#039;%d&amp;#039;, {&lt;br /&gt;
			[&amp;#039;0&amp;#039;] = &amp;#039;g&amp;#039;, [&amp;#039;1&amp;#039;] = &amp;#039;h&amp;#039;, [&amp;#039;2&amp;#039;] = &amp;#039;i&amp;#039;, [&amp;#039;3&amp;#039;] = &amp;#039;j&amp;#039;, [&amp;#039;4&amp;#039;] = &amp;#039;k&amp;#039;,&lt;br /&gt;
			[&amp;#039;5&amp;#039;] = &amp;#039;l&amp;#039;, [&amp;#039;6&amp;#039;] = &amp;#039;m&amp;#039;, [&amp;#039;7&amp;#039;] = &amp;#039;n&amp;#039;, [&amp;#039;8&amp;#039;] = &amp;#039;o&amp;#039;, [&amp;#039;9&amp;#039;] = &amp;#039;p&amp;#039;,&lt;br /&gt;
		} )&lt;br /&gt;
		return leading .. escapeddigits .. trailing&lt;br /&gt;
	end )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- restaure les strip markers&lt;br /&gt;
local function restoreStripMarkers( input )&lt;br /&gt;
	return input:gsub( &amp;#039;(UNIQ%-%-%a+%-)(%a%a%a%a%a%a%a%a)(%-QINU)&amp;#039;, function ( leading, escapeddigits, trailing )&lt;br /&gt;
		local hexdigits = escapeddigits:gsub( &amp;#039;%a&amp;#039;, {&lt;br /&gt;
			[&amp;#039;g&amp;#039;] = &amp;#039;0&amp;#039;, [&amp;#039;h&amp;#039;] = &amp;#039;1&amp;#039;, [&amp;#039;i&amp;#039;] = &amp;#039;2&amp;#039;, [&amp;#039;j&amp;#039;] = &amp;#039;3&amp;#039;, [&amp;#039;k&amp;#039;] = &amp;#039;4&amp;#039;,&lt;br /&gt;
			[&amp;#039;l&amp;#039;] = &amp;#039;5&amp;#039;, [&amp;#039;m&amp;#039;] = &amp;#039;6&amp;#039;, [&amp;#039;n&amp;#039;] = &amp;#039;7&amp;#039;, [&amp;#039;o&amp;#039;] = &amp;#039;8&amp;#039;, [&amp;#039;p&amp;#039;] = &amp;#039;9&amp;#039;,&lt;br /&gt;
		} )&lt;br /&gt;
		return leading .. hexdigits .. trailing&lt;br /&gt;
	end )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- remplacement de certains caractères, pour simplifier les pattern&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 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;
			-- remplacement des espaces insécable par des espace simple&lt;br /&gt;
			:gsub( nbsp, &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;&amp;amp;#160;&amp;#039;, &amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( nnbsp, &amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;#8239;&amp;#039;, &amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;#x202F;&amp;#039;, &amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;\226\128[\132-\138]&amp;#039;, &amp;#039; &amp;#039; ) -- U+2004 à U+200A&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;#32;&amp;#039;, &amp;#039; &amp;#039; )&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;
		end&lt;br /&gt;
		-- si nombre est un chiffre en exposant ou indice comme ², retourne ce chiffre&lt;br /&gt;
		for i = 0, 9 do&lt;br /&gt;
			local is = tostring(i)&lt;br /&gt;
			if result == supUnicode[ is ] or result == subUnicode[ is ] then&lt;br /&gt;
				return is&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not result:match( &amp;#039;^%-?[%d., ]*%d$&amp;#039; ) and not result:match( &amp;#039;^%-?[%d., ]*%d ?e[+-]?%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;
		if num == &amp;#039;1&amp;#039; then&lt;br /&gt;
			return &amp;#039;10&amp;#039; .. exponent&lt;br /&gt;
		end&lt;br /&gt;
		exponent = nbsp .. &amp;#039;×&amp;#039; .. nnbsp .. &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, deci = 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;, nbsp .. &amp;#039;%1&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if deci ~= &amp;#039;&amp;#039; or ( decimals and decimals &amp;gt; 0 ) then&lt;br /&gt;
		if decimals and decimals &amp;gt; #deci then&lt;br /&gt;
			deci = deci .. string.rep( &amp;#039;0&amp;#039;, decimals - #deci )&lt;br /&gt;
		end&lt;br /&gt;
		if #deci &amp;gt; 3 then&lt;br /&gt;
			deci = &amp;#039;,&amp;#039; .. deci:gsub( &amp;#039;(%d%d%d)&amp;#039;, &amp;#039;%1&amp;#039; .. nbsp ):gsub( nbsp .. &amp;#039;$&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
		else&lt;br /&gt;
			deci = &amp;#039;,&amp;#039; .. deci&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return moins .. entier .. deci .. 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 = round, decimals = decimals }&lt;br /&gt;
	elseif type( nombres ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		-- retire les chiffres des strip markers&lt;br /&gt;
		nombres = escapeStripMarkers( nombres )&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;
		if nombres:match(&amp;#039;%d%-%d&amp;#039;) then&lt;br /&gt;
			nombres = nombres:gsub( &amp;#039;%f[%d.,][%d., ]*%d&amp;#039;, formatN )&lt;br /&gt;
		else&lt;br /&gt;
			nombres = nombres&lt;br /&gt;
				:gsub( &amp;#039;%-?%f[%d.,][%d., ]*%d ?e[+-]?%d+&amp;#039;, formatN )&lt;br /&gt;
				:gsub( &amp;#039;%-?%f[%d.,][%d., ]*%d&amp;#039;, formatN )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- restaure les strip markers&lt;br /&gt;
		nombres = restoreStripMarkers( nombres )&lt;br /&gt;
&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;, [&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;, [&amp;#039;—&amp;#039;] = &amp;#039;–&amp;#039;, [&amp;#039;-&amp;#039;] = &amp;#039;–&amp;#039;,  -- demi cadratin, 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 cap0, capture = toParse:match( &amp;#039;^(([%d., ]+%f[^d%(])%s*)&amp;#039; )&lt;br /&gt;
		local prefix&lt;br /&gt;
		if not cap0 then&lt;br /&gt;
			-- cas d&amp;#039;un nombre entre guillemet, gras, italique...&lt;br /&gt;
			cap0, capture = toParse:match( &amp;#039;^(([&amp;quot;\&amp;#039;]+[%d., ]+[&amp;quot;\&amp;#039;]+)%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if not cap0 then&lt;br /&gt;
			-- cas ou le nombre est remplcé par un ou plusieurs points d&amp;#039;interrogation&lt;br /&gt;
			cap0, prefix = toParse:match( &amp;#039;^((%?+)%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if not cap0 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;
			cap0, 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 cap0 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;
			cap0, 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 cap0 then&lt;br /&gt;
			-- cas ou le nombre est précédé par un symbole ≤, ≥, ≈, ≃ et quelque autres&lt;br /&gt;
			cap0, prefix, capture = toParse:match( &amp;#039;^((\226[\136\137][\131\136\164\165\187\188] ?)([+-]?%f[%d.,][%d., ]*%d%f[%D])%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if not cap0 then&lt;br /&gt;
			-- cas ou le nombre est précédé par un symbole ± (\194\177)&lt;br /&gt;
			cap0, prefix, capture = toParse:match( &amp;#039;^((±) ?(%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;
&lt;br /&gt;
		if cap0 then&lt;br /&gt;
			toParse = toParse:sub( cap0:len() + 1 )&lt;br /&gt;
&lt;br /&gt;
			-- point de suspensions (ex π = 3.14159...)&lt;br /&gt;
			cap0 = toParse:match( &amp;#039;^…%s*&amp;#039; )&lt;br /&gt;
			if not cap0 then&lt;br /&gt;
				cap0 = toParse:match( &amp;#039;^%.%.%.%s*&amp;#039; )&lt;br /&gt;
			end&lt;br /&gt;
			if cap0 then&lt;br /&gt;
				result[1] = result[1] .. &amp;#039;…&amp;#039;&lt;br /&gt;
				toParse = toParse:sub( cap0:len() + 1 )&lt;br /&gt;
			end&lt;br /&gt;
			if toParse == &amp;#039;&amp;#039; then&lt;br /&gt;
				return result&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- fraction&lt;br /&gt;
		capture = mw.ustring.sub( toParse, 1, 1 )&lt;br /&gt;
		if fractionUnicode[ capture ] then&lt;br /&gt;
			result.fraction = fractionUnicode[ capture ]&lt;br /&gt;
			toParse = toParse:sub( capture:len() + 1 ):gsub( &amp;#039;^%s*&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
			result[1] = result[1] or &amp;#039;&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			cap0, capture = toParse:match( &amp;#039;^(([%d,]*/%f[%d][%d ]*%d)%s*)&amp;#039; )&lt;br /&gt;
			if not cap0 then&lt;br /&gt;
				-- caractère de fraction ⁄ = \226\129\132&lt;br /&gt;
				cap0, capture = toParse:match( &amp;#039;^((%d*⁄%d+)%s*)&amp;#039; )&lt;br /&gt;
				if cap0 then&lt;br /&gt;
					capture = capture:gsub( &amp;#039;⁄&amp;#039;, &amp;#039;/&amp;#039; )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if cap0 then&lt;br /&gt;
				if result[1] and 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( cap0:len() + 1 )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if toParse~= &amp;#039;&amp;#039; and ( result[1] or result.fraction ) then&lt;br /&gt;
			-- lien avec un deuxième nombre&lt;br /&gt;
			local cap0, conj, num = toParse:match( &amp;#039;^(([etou+/;x*-]+) *(%-?%f[%d.,][%d., ]*%d%f[%D]%)?)%s*)&amp;#039; )&lt;br /&gt;
			if not cap0 and toParse:byte() &amp;gt; 127 then&lt;br /&gt;
				cap0, conj, num = mw.ustring.match( toParse, &amp;#039;^(([à−×±—–]+) *(%-?%f[%d.,][%d., ]*%d%f[%D]%)?)%s*)&amp;#039; )&lt;br /&gt;
			end&lt;br /&gt;
			if cap0 and specificArgs[ conj ]&lt;br /&gt;
				and not (&lt;br /&gt;
					specificArgs[ conj ] == &amp;#039;×&amp;#039;&lt;br /&gt;
					and (&lt;br /&gt;
						mw.ustring.match( toParse, &amp;#039;^[×x] ?10 ?e&amp;#039; )&lt;br /&gt;
						or mw.ustring.match( toParse, &amp;#039;^[×x] ?10&amp;lt;sup&amp;gt;(%-?%d+)&amp;lt;/sup&amp;gt;&amp;#039; )&lt;br /&gt;
					)&lt;br /&gt;
				)&lt;br /&gt;
			then&lt;br /&gt;
				result[ specificArgs[ conj ] ] = num&lt;br /&gt;
				toParse = toParse:sub( cap0:len() + 1 )&lt;br /&gt;
			end&lt;br /&gt;
			if result[&amp;#039;+&amp;#039;] or result[&amp;#039;×&amp;#039;] or result[&amp;#039;/&amp;#039;] then&lt;br /&gt;
				cap0, conj, num = mw.ustring.match( toParse, &amp;#039;^(([/;x*×−-]) *(%-?%f[%d.,][%d., ]*%d%f[%D])%s*)&amp;#039; )&lt;br /&gt;
				if cap0 then&lt;br /&gt;
					if specificArgs[ conj ] == &amp;#039;×&amp;#039; then&lt;br /&gt;
						result[&amp;#039;××&amp;#039;] = num&lt;br /&gt;
					elseif 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( cap0: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;
		cap0, capture = toParse:match( &amp;#039;^(e(%-?%d+)%s*)&amp;#039; )&lt;br /&gt;
		if not cap0 then&lt;br /&gt;
			cap0, capture = toParse:match( &amp;#039;^([x\195]\151? ?10e(%-?%d+)%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if not cap0 then&lt;br /&gt;
			cap0, capture = toParse:match( &amp;#039;^([x\195]\151? ?10&amp;lt;sup&amp;gt;(%-?%d+)&amp;lt;/sup&amp;gt;%s*)&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if cap0 then&lt;br /&gt;
			result.e = capture&lt;br /&gt;
			toParse = toParse:sub( cap0:len() + 1 )&lt;br /&gt;
		end&lt;br /&gt;
		if result[1] == &amp;#039;10&amp;#039; and not result.e and not result.fraction then&lt;br /&gt;
			cap0, capture = toParse:match( &amp;#039;^(&amp;lt;sup&amp;gt;(%-?%d+)&amp;lt;/sup&amp;gt;%s*)&amp;#039; )&lt;br /&gt;
			if cap0 then&lt;br /&gt;
				result[1] = false&lt;br /&gt;
				result.e = capture&lt;br /&gt;
				toParse = toParse:sub( cap0:len() + 1 )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if toParse == &amp;#039;&amp;#039; then&lt;br /&gt;
			return result&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- unités&lt;br /&gt;
		local texteUnit = toParse&lt;br /&gt;
		toParse = toParse:gsub( &amp;#039;^([^%[&amp;lt;]-)&amp;lt;sup&amp;gt;(%d)&amp;lt;/sup&amp;gt;&amp;#039;, &amp;#039;%1%2&amp;#039; )&lt;br /&gt;
		if Data.unit[ toParse ]&lt;br /&gt;
			or toParse:match( &amp;#039;%b&amp;lt;&amp;gt;&amp;#039; )&lt;br /&gt;
			or  toParse:match( &amp;#039;UNIQ%-%-%a+%-%x%x%x%x%x%x%x%x%-QINU&amp;#039; )&lt;br /&gt;
			or mw.ustring.match( toParse, &amp;#039;^%a+$&amp;#039; )&lt;br /&gt;
		then&lt;br /&gt;
			result[ #result + 1] = toParse&lt;br /&gt;
			toParse = &amp;#039;&amp;#039;&lt;br /&gt;
		elseif toParse:match( &amp;#039;%b&amp;lt;&amp;gt;&amp;#039; ) then&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;
		end&lt;br /&gt;
		if 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;
				cap0, unit, exp = mw.ustring.match( toParse, &amp;#039;^((/? ?[^%s%d/%[%]]*%b[][^%s%d/]*) ?(%-?%d*)%s*)&amp;#039; )&lt;br /&gt;
				if not cap0 then&lt;br /&gt;
					-- unité ne contenant pas de lien&lt;br /&gt;
					cap0, unit, exp = mw.ustring.match( toParse, &amp;#039;^((/? ?[^%s%d/]+) ?(%-?%d*)%s*)&amp;#039; )&lt;br /&gt;
				end&lt;br /&gt;
				if not cap0 then&lt;br /&gt;
					-- l/100 km&lt;br /&gt;
					cap0, unit, exp = mw.ustring.match( toParse, &amp;#039;^((/100 ?[^%s%d/]+) ?(%-?%d*)%s*)&amp;#039; )&lt;br /&gt;
				end&lt;br /&gt;
				if cap0 then&lt;br /&gt;
					if unit:match( &amp;#039;%-$&amp;#039; ) and exp ~= &amp;#039;&amp;#039; then -- rustine pour quand le &amp;quot;-&amp;quot; se retrouve dans la capture &amp;quot;unit&amp;quot; au lieu de la capture &amp;quot;exp&amp;quot;&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 -- rustine pour quand un &amp;quot;-&amp;quot; a été capturé dans &amp;quot;exp&amp;quot; mais sans qu&amp;#039;il y ait de chiffres après&lt;br /&gt;
						unit = cap0&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;
						result[ #result + 1] = unit&lt;br /&gt;
						result[ #result + 1] = exp&lt;br /&gt;
						toParse = toParse:sub( cap0: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 cap0&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if toParse == &amp;#039;&amp;#039; then&lt;br /&gt;
			if #result &amp;gt; 3 then&lt;br /&gt;
				local estSimpleTexte = true&lt;br /&gt;
				for r = 2, #result, 2 do&lt;br /&gt;
					if Data.unit[ result[ r ] ]&lt;br /&gt;
						or result[ r ]:sub( 1, 1 ) == &amp;#039;/&amp;#039;&lt;br /&gt;
						or Data.prefix[ result[ r ]:sub( 1, 1 ) ] and Data.unit[ result[ r ]:sub( 2 ) ]&lt;br /&gt;
						or Data.prefix[ result[ r ]:sub( 1, 2 ) ] and Data.unit[ result[ r ]:sub( 3 ) ]&lt;br /&gt;
						or result[ r + 1 ] and result[ r + 1 ] ~= &amp;#039;&amp;#039;&lt;br /&gt;
					then&lt;br /&gt;
						estSimpleTexte = false&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if estSimpleTexte then&lt;br /&gt;
					result[ 2 ] = texteUnit&lt;br /&gt;
					for r = #result, 3, -1 do&lt;br /&gt;
						result[ r ] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&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;
-- nomUnit 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 false.&lt;br /&gt;
function p.nomUnit( unit, exposant )&lt;br /&gt;
	unit = trim( unit )&lt;br /&gt;
	if not dataSuccess or type( unit ) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
		return false&lt;br /&gt;
	end&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;
	-- /100&lt;br /&gt;
	local divisor = &amp;#039;&amp;#039;&lt;br /&gt;
	if unit:sub( 1, 2 ) == &amp;#039;10&amp;#039; then&lt;br /&gt;
		divisor, unit = unit:match( &amp;#039;^(1[0 ]*)(.+)$&amp;#039; )&lt;br /&gt;
		local divisorName = {&lt;br /&gt;
			[&amp;#039;10&amp;#039;] = &amp;#039;dix &amp;#039;,&lt;br /&gt;
			[&amp;#039;100&amp;#039;] = &amp;#039;cent &amp;#039;,&lt;br /&gt;
			[&amp;#039;1000&amp;#039;] = &amp;#039;mille &amp;#039;,&lt;br /&gt;
			[&amp;#039;10000&amp;#039;] = &amp;#039;dix-mille &amp;#039;,&lt;br /&gt;
			[&amp;#039;100000&amp;#039;] = &amp;#039;cent-mille &amp;#039;,&lt;br /&gt;
			[&amp;#039;1000000&amp;#039;] = &amp;#039;un million de &amp;#039;,&lt;br /&gt;
			[&amp;#039;1000000000&amp;#039;] = &amp;#039;un millard de &amp;#039;,&lt;br /&gt;
		}&lt;br /&gt;
		divisor = divisorName[ divisor:gsub( &amp;#039; &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 divisor .. 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 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;
	-- formatage du nombre&lt;br /&gt;
	local nombre = p.formatNombres( args[1], args.arrondi, args[&amp;#039;décimales&amp;#039;] )&lt;br /&gt;
	if nombre == &amp;#039;&amp;#039; then&lt;br /&gt;
		nombre = nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local wiki = {}&lt;br /&gt;
&lt;br /&gt;
	-- prefix est un paramètre interne défini par p.parseUnit, utile notamment lorsque {{unité}} est utilisé dans les infobox&lt;br /&gt;
	if args.prefix then&lt;br /&gt;
		wiki[ #wiki + 1 ] = args.prefix&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if nombre then&lt;br /&gt;
		wiki[ #wiki + 1 ] = nombre&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- fraction&lt;br /&gt;
	local fraction = args.fraction&lt;br /&gt;
	if fraction then&lt;br /&gt;
		fraction = fractionUnicode[ fraction ] or fraction&lt;br /&gt;
		local nom, den = fraction:match( &amp;#039;^(.-)/(.+)$&amp;#039; )&lt;br /&gt;
		if nom then&lt;br /&gt;
			if nom:match( &amp;#039;^[%dn]%d?$&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;&lt;br /&gt;
					.. p.formatNombres( nom )&lt;br /&gt;
					.. &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;&lt;br /&gt;
					.. p.formatNombres( den )&lt;br /&gt;
					.. &amp;#039;&amp;lt;/sub&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			fraction = nom .. &amp;#039;⁄&amp;#039; .. den&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if nombre then&lt;br /&gt;
			wiki[ #wiki + 1 ] = nbsp&lt;br /&gt;
		end&lt;br /&gt;
		wiki[ #wiki + 1 ] = 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;, &amp;#039;±&amp;#039; }&lt;br /&gt;
	for i = 1, #specificArgs do&lt;br /&gt;
		local name = specificArgs[ i ]&lt;br /&gt;
		local v = args[ name ] and 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; then&lt;br /&gt;
				name = &amp;#039;/&amp;#039;&lt;br /&gt;
			elseif name == &amp;#039;××&amp;#039; then&lt;br /&gt;
				name = &amp;#039;×&amp;#039;&lt;br /&gt;
			end&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;
				wiki[ #wiki + 1 ] = &amp;#039;–&amp;#039;&lt;br /&gt;
			elseif name == &amp;#039;×&amp;#039; or name == &amp;#039;±&amp;#039; then&lt;br /&gt;
				wiki[ #wiki + 1 ] = nbsp .. name .. nbsp&lt;br /&gt;
			else&lt;br /&gt;
				wiki[ #wiki + 1 ] = nbsp .. name .. &amp;#039; &amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			wiki[ #wiki + 1 ] = 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 units = &amp;#039;&amp;#039;&lt;br /&gt;
	local unitFullName&lt;br /&gt;
	do&lt;br /&gt;
		local i = 1&lt;br /&gt;
		local unit = trim( args[ 2 * i ] )&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;
				local suffix = unit:sub( -2 ) -- yes, it&amp;#039;s 2 bytes&lt;br /&gt;
				if suffix == &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 suffix == &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 unit:sub( 1, 1 ) == &amp;#039;/&amp;#039; then&lt;br /&gt;
				sep = &amp;#039;/&amp;#039;&lt;br /&gt;
				unit = trim( unit:sub( 2 ) ) or &amp;#039;&amp;#039;&lt;br /&gt;
				if not par then&lt;br /&gt;
					par = true&lt;br /&gt;
					if unit:sub( 1, 2 ) == &amp;#039;10&amp;#039; then&lt;br /&gt;
						nomUnits[ #nomUnits + 1 ] = &amp;#039;pour&amp;#039;&lt;br /&gt;
					else&lt;br /&gt;
						nomUnits[ #nomUnits + 1 ] = &amp;#039;par&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					nomUnits[ #nomUnits + 1 ] = &amp;#039;et par&amp;#039;&lt;br /&gt;
					if nomUnits[ #nomUnits - 2 ] == &amp;#039;et par&amp;#039; then&lt;br /&gt;
						nomUnits[ #nomUnits - 2 ] = &amp;#039;par&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			elseif units ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				sep = nbsp&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;
				nomUnits[ #nomUnits + 1 ] = &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;
			local nomUnit = p.nomUnit( unit, exp )&lt;br /&gt;
			if nomUnit then&lt;br /&gt;
				nomUnits[ #nomUnits + 1 ] = nomUnit&lt;br /&gt;
			else&lt;br /&gt;
				-- si le code de l&amp;#039;unité n&amp;#039;est pas reconnu, insère false en première position de la table.&lt;br /&gt;
				table.insert( nomUnits, 1, false )&lt;br /&gt;
			end&lt;br /&gt;
			i = i + 1&lt;br /&gt;
			unit = trim( args[ 2 * i ] )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		unitFullName = nomUnits[1] and table.concat( nomUnits, &amp;#039; &amp;#039; ) or false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- conversion&lt;br /&gt;
	if unitFullName then&lt;br /&gt;
		local nameSingular = mw.ustring.gsub( unitFullName, &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[ nameSingular ]&lt;br /&gt;
		if not convertTable and #nameSingular &amp;gt; 5 then&lt;br /&gt;
			-- gesion des multiples (Kilo, méga, mili...)&lt;br /&gt;
			local prefix = Data.prefix[ nameSingular:sub( 1, 4 ) ] or Data.prefix[ nameSingular:sub( 1, 5 ) ]&lt;br /&gt;
			local _, par = nameSingular:find( &amp;#039; par &amp;#039; )&lt;br /&gt;
			local prefix2&lt;br /&gt;
			if par then&lt;br /&gt;
				prefix2 = Data.prefix[ nameSingular:sub( par + 1, 4 ) ] or Data.prefix[ nameSingular:sub( par + 1, 5 ) ]&lt;br /&gt;
			end&lt;br /&gt;
			if prefix and Data.convert[ nameSingular:gsub( &amp;#039;^&amp;#039; .. prefix.nom, &amp;#039;&amp;#039; ) ] then&lt;br /&gt;
				convertTable = Data.convert[ nameSingular: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[ nameSingular:gsub( &amp;#039; par &amp;#039; .. prefix2.nom, &amp;#039;&amp;#039; ) ] then&lt;br /&gt;
				convertTable = Data.convert[ nameSingular: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[ nameSingular: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[ nameSingular: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 = 1, #wiki do&lt;br /&gt;
				local v = wiki[ i ]&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 c[1]:sub( 1, 2 ) == &amp;#039;°&amp;#039; then -- yes, it&amp;#039;s 2 bytes&lt;br /&gt;
							sep = &amp;#039;&amp;#039;&lt;br /&gt;
						end&lt;br /&gt;
						converted[ #converted + 1 ] = 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;
	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;
		wiki[ #wiki + 1 ] = &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;
		wiki[ #wiki + 1 ] = 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;
				wiki[ #wiki + 1 ] = &amp;#039;)&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			wiki[ #wiki + 1 ] = nbsp .. &amp;#039;×&amp;#039; .. nnbsp .. &amp;#039;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;
			wiki[ #wiki + 1 ] = &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 = nbsp&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 considérant les espaces qui peuvent être devenus insécables)&lt;br /&gt;
		if unitFullName and unitFullName ~= units:gsub( nbsp, &amp;#039; &amp;#039; ) then&lt;br /&gt;
			units = string.format( &amp;#039;&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/abbr&amp;gt;&amp;#039;, unitFullName, units )&lt;br /&gt;
		end&lt;br /&gt;
		wiki[ #wiki + 1 ] = 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;
		addErrorCat = false&lt;br /&gt;
		args[1] = trim( args[1] ) or false&lt;br /&gt;
		local basique = require( &amp;#039;Module:Yesno&amp;#039; )( args.basique )&lt;br /&gt;
		if args[1] and not basique 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] then&lt;br /&gt;
				-- cas ou le paramètre 2 contient &amp;#039;m3&amp;#039; ou &amp;#039;km2&amp;#039;&lt;br /&gt;
				local a, d = args[2]:match(&amp;#039;^(%a%a?)(%d)$&amp;#039;)&lt;br /&gt;
				if a and Data.unit[a] then&lt;br /&gt;
					args[2] = a&lt;br /&gt;
					args[3] = d&lt;br /&gt;
				end&lt;br /&gt;
				-- cas ou le paramètre 2 contient &amp;#039;km/s&amp;#039; ou &amp;#039;m3/h&amp;#039;&lt;br /&gt;
				if 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;
		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 and mw.title.getCurrentTitle():inNamespaces( 0, 4, 8, 10, 12, 14, 100, 828 ) then&lt;br /&gt;
			cat = errorCat&lt;br /&gt;
			mw.log( errorCat ,&amp;#039; → &amp;#039;, args[1], &amp;#039;|&amp;#039;, args[2] )&lt;br /&gt;
		end&lt;br /&gt;
		return ( p._unite( args ) or &amp;#039;&amp;#039; ) .. cat&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.emulationFormatnum( frame )&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	return p.formatNombres( args[1] )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;Od1n</name></author>
	</entry>
</feed>