<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wicri-demo.istex.fr/Wicri/Base131/Test131/fr/index.php?action=history&amp;feed=atom&amp;title=Module%3AItaliques_biologiques</id>
	<title>Module:Italiques biologiques - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wicri-demo.istex.fr/Wicri/Base131/Test131/fr/index.php?action=history&amp;feed=atom&amp;title=Module%3AItaliques_biologiques"/>
	<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Base131/Test131/fr/index.php?title=Module:Italiques_biologiques&amp;action=history"/>
	<updated>2026-04-19T06:49:02Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.31.10</generator>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Base131/Test131/fr/index.php?title=Module:Italiques_biologiques&amp;diff=1948&amp;oldid=prev</id>
		<title>Jacques Ducloy : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Base131/Test131/fr/index.php?title=Module:Italiques_biologiques&amp;diff=1948&amp;oldid=prev"/>
		<updated>2020-12-11T12:32:49Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version du 11 décembre 2020 à 12:32&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&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;/table&gt;</summary>
		<author><name>Jacques Ducloy</name></author>
		
	</entry>
	<entry>
		<id>https://wicri-demo.istex.fr/Wicri/Base131/Test131/fr/index.php?title=Module:Italiques_biologiques&amp;diff=1947&amp;oldid=prev</id>
		<title>Jacques Ducloy : Page créée avec « -- gestion de la mise en italique d'un nom scientifique, en respectant les conventions de la biologie  local p = {}  -- fonction basique mettant le titre courant en italiq... »</title>
		<link rel="alternate" type="text/html" href="https://wicri-demo.istex.fr/Wicri/Base131/Test131/fr/index.php?title=Module:Italiques_biologiques&amp;diff=1947&amp;oldid=prev"/>
		<updated>2017-06-24T06:33:55Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « -- gestion de la mise en italique d&amp;#039;un nom scientifique, en respectant les conventions de la biologie  local p = {}  -- fonction basique mettant le titre courant en italiq... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- gestion de la mise en italique d'un nom scientifique, en respectant les conventions de la biologie&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- fonction basique mettant le titre courant en italique, sauf la partie namespace et la partie homonymie si présente&lt;br /&gt;
-- paramètres : lang → optionnel : ajout d'un tag de langue si présent&lt;br /&gt;
function p.titre_en_italiques(frame)&lt;br /&gt;
&lt;br /&gt;
    local titre = mw.title.getCurrentTitle() -- l'objet titre pour la page courante&lt;br /&gt;
    local resu  -- le résultat qui sera retourné&lt;br /&gt;
    local page = titre.text  -- le nom de la page, sans le namespace&lt;br /&gt;
    -- paramètre optionnel : la langue&lt;br /&gt;
    local lang = frame.args[&amp;quot;lang&amp;quot;] or frame:getParent().args[&amp;quot;lang&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    -- variables contenant l'ouverture et la fermeture du span (ou vide)&lt;br /&gt;
    local ospan = &amp;quot;&amp;quot;&lt;br /&gt;
    local fspan = &amp;quot;&amp;quot;&lt;br /&gt;
    if (lang) then&lt;br /&gt;
        ospan = '&amp;lt;span lang=&amp;quot;' .. lang .. '&amp;quot;&amp;gt;'&lt;br /&gt;
        fspan = '&amp;lt;/span&amp;gt;'&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- préparation résultat : on commence par le namespace&lt;br /&gt;
    if (titre.nsText ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        resu = titre.nsText .. &amp;quot;:&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    -- on ajoute le span de la langue si demandé&lt;br /&gt;
    resu = resu .. ospan&lt;br /&gt;
    -- on ajoute l'italique&lt;br /&gt;
    resu = resu .. &amp;quot;''&amp;quot;&lt;br /&gt;
    if (mw.ustring.find(page, &amp;quot; (&amp;quot;, 1, true)) then&lt;br /&gt;
        -- présence d'une homonymie, on ajoute la fin des italiques&lt;br /&gt;
        -- avant le &amp;quot; (&amp;quot; (une seule fois, au cas où il y aurait plusieurs ())&lt;br /&gt;
        -- on ajoute aussi la fermeture éventuelle du span&lt;br /&gt;
        resu = resu .. mw.ustring.gsub(page, &amp;quot; [(]&amp;quot;, &amp;quot;''&amp;quot; .. fspan .. &amp;quot; (&amp;quot;, 1)&lt;br /&gt;
    else&lt;br /&gt;
        -- pas d'homonymie, on ajoute la page + la fin de l'italique + fin du span&lt;br /&gt;
        resu = resu .. page .. &amp;quot;''&amp;quot; .. fspan&lt;br /&gt;
    end&lt;br /&gt;
    -- résultat, dans un preprocess afin d'interpréter son action&lt;br /&gt;
    return frame:preprocess(&amp;quot;{{DISPLAYTITLE:&amp;quot; .. resu .. &amp;quot;|noerror}}&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- retourne le texte après avoir supprimer les espaces, retour ligne... en début et fin de texte.&lt;br /&gt;
-- si texte == nil, la fonction retourne nil. &lt;br /&gt;
-- Si le texte est vide ou composé uniquement d'espces, la fonction retourne un texte vide ''.&lt;br /&gt;
function p.trim (texte)&lt;br /&gt;
    return texte and string.match (texte, '^%s*(.-)%s*$')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- table des éléments à ne pas mettre en italique&lt;br /&gt;
-- note : mettre un &amp;quot; &amp;quot; avant un terme qui existe aussi sous forme longue&lt;br /&gt;
--  exemple : &amp;quot; var.&amp;quot;, à cause de &amp;quot;convar.&amp;quot;. Sans l'espace les deux vont s'appliquer&lt;br /&gt;
--            au texte analysé. Notez de bien répercuter ce même espace dans la partie de droite&lt;br /&gt;
p.exclude = {&lt;br /&gt;
    { &amp;quot; cl[.]&amp;quot;, &amp;quot; ''cl.''&amp;quot; },&lt;br /&gt;
    { &amp;quot;convar[.]&amp;quot;, &amp;quot;''convar.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; f[.]&amp;quot;, &amp;quot; ''f.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; gen[.]&amp;quot;, &amp;quot; ''gen.''&amp;quot; },&lt;br /&gt;
    { &amp;quot;kl[.]&amp;quot;, &amp;quot;''kl.''&amp;quot; },&lt;br /&gt;
    { &amp;quot;nothog[.]&amp;quot;, &amp;quot;''nothog.''&amp;quot; },&lt;br /&gt;
    { &amp;quot;nothosp[.]&amp;quot;, &amp;quot;''nothosp.''&amp;quot; },&lt;br /&gt;
    { &amp;quot;nothovar[.]&amp;quot;, &amp;quot;''nothovar.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; ord[.]&amp;quot;, &amp;quot; ''ord.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; fam[.]&amp;quot;, &amp;quot; ''fam.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; sect[.]&amp;quot;, &amp;quot; ''sect.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; ser[.]&amp;quot;, &amp;quot; ''ser.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; sp[.]&amp;quot;, &amp;quot; ''sp.''&amp;quot; },&lt;br /&gt;
    { &amp;quot;subg[.]&amp;quot;, &amp;quot;''subg.''&amp;quot; },&lt;br /&gt;
    { &amp;quot;subsp[.]&amp;quot;, &amp;quot;''subsp.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; tr[.]&amp;quot;, &amp;quot; ''tr.''&amp;quot; },&lt;br /&gt;
    { &amp;quot; var[.]&amp;quot;, &amp;quot; ''var.''&amp;quot; },&lt;br /&gt;
    { &amp;quot;×&amp;quot;, &amp;quot;''×''&amp;quot; },&lt;br /&gt;
    { &amp;quot;[(]&amp;quot;, &amp;quot;''(''&amp;quot; },&lt;br /&gt;
    { &amp;quot;[)]&amp;quot;, &amp;quot;'')''&amp;quot; }&lt;br /&gt;
}&lt;br /&gt;
-- liste d'exclusion uniquement pour mettre droit dans la partie {{taxobox}} italique (ifgenre)&lt;br /&gt;
p.exclude_span = {&lt;br /&gt;
    { &amp;quot; cl[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;cl.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;convar[.]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;convar.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; f[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;f.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; gen[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;gen.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;kl[.]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;kl.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;nothog[.]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;nothog.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;nothosp[.]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;nothosp.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;nothovar[.]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;nothovar.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; ord[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;ord.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; fam[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;fam.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; sect[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;sect.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; ser[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;ser.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; sp[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;sp.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;subg[.]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;subg.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;subsp[.]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;subsp.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; tr[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;tr.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot; var[.]&amp;quot;, &amp;quot; &amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;var.&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;×&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;×&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;[(]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;quot; },&lt;br /&gt;
    { &amp;quot;[)]&amp;quot;, &amp;quot;&amp;lt;span style=\&amp;quot;font-style: normal\&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;quot; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  Liste d'exclusion de noms de clades qui sont français et donc ne doivent pas être en italique&lt;br /&gt;
--]]&lt;br /&gt;
p.exclude_clades = {&lt;br /&gt;
    &amp;quot;Angiospermes&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  Retourne vrai si le nom passé est un nom de clade en français (ça *doit* être un rang clade)&lt;br /&gt;
--]]&lt;br /&gt;
function p.clade_francais(nom)&lt;br /&gt;
    local tst -- on regarde si présence d'accents&lt;br /&gt;
    tst = mw.ustring.find(nom, &amp;quot;[éèêëàäâçùüüïîôö]&amp;quot;)&lt;br /&gt;
    if (tst ~= nil) then&lt;br /&gt;
        return true -- visiblement en français on laisse sans mettre en italique&lt;br /&gt;
    end&lt;br /&gt;
    -- liste d'exclusion de noms traités comme français&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while (p.exclude_clades[i] ~= nil) do&lt;br /&gt;
        if (p.exclude_clades[i] == nom) then&lt;br /&gt;
            -- exception, en français, on laisse sans italiques&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
        i = i + 1 &lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- si 'true' indique regne tout en italique&lt;br /&gt;
p.regnes = {&lt;br /&gt;
 [&amp;quot;test&amp;quot;]=false, [&amp;quot;algue&amp;quot;]=true, [&amp;quot;animal&amp;quot;]=false, [&amp;quot;archaea&amp;quot;]=true,&lt;br /&gt;
 [&amp;quot;bactérie&amp;quot;]=true, [&amp;quot;champignon&amp;quot;]=true, [&amp;quot;protiste&amp;quot;]=false, [&amp;quot;végétal&amp;quot;]=true, [&amp;quot;virus&amp;quot;]=true,&lt;br /&gt;
 [&amp;quot;neutre&amp;quot;]=true, [&amp;quot;eucaryote&amp;quot;]=false, [&amp;quot;procaryote&amp;quot;]=true&lt;br /&gt;
}&lt;br /&gt;
-- si true indique rang inférieur (ou égal) au genre&lt;br /&gt;
p.rangs = {&lt;br /&gt;
 [&amp;quot;clade&amp;quot;]=false, [&amp;quot;type&amp;quot;]=false, [&amp;quot;groupe&amp;quot;]=false, [&amp;quot;non-classé&amp;quot;]=false, [&amp;quot;sous-forme&amp;quot;]=true,&lt;br /&gt;
 [&amp;quot;forme&amp;quot;]=true, [&amp;quot;cultivar&amp;quot;]=true, [&amp;quot;variété&amp;quot;]=true, [&amp;quot;sous-espèce&amp;quot;]=true, [&amp;quot;hybride&amp;quot;]=true,&lt;br /&gt;
 [&amp;quot;espèce&amp;quot;]=true, [&amp;quot;sous-série&amp;quot;]=true, [&amp;quot;série&amp;quot;]=true, [&amp;quot;sous-section&amp;quot;]=false, [&amp;quot;section&amp;quot;]=false,&lt;br /&gt;
 [&amp;quot;sous-genre&amp;quot;]=true, [&amp;quot;genre&amp;quot;]=true, [&amp;quot;sous-tribu&amp;quot;]=false, [&amp;quot;tribu&amp;quot;]=false, [&amp;quot;super-tribu&amp;quot;]=false,&lt;br /&gt;
 [&amp;quot;infra-tribu&amp;quot;]=false, [&amp;quot;sous-famille&amp;quot;]=false, [&amp;quot;famille&amp;quot;]=false, [&amp;quot;épifamille&amp;quot;]=false, [&amp;quot;super-famille&amp;quot;]=false,&lt;br /&gt;
 [&amp;quot;micro-ordre&amp;quot;]=false, [&amp;quot;infra-ordre&amp;quot;]=false, [&amp;quot;sous-ordre&amp;quot;]=false, [&amp;quot;ordre&amp;quot;]=false, [&amp;quot;super-ordre&amp;quot;]=false,&lt;br /&gt;
 [&amp;quot;sous-cohorte&amp;quot;]=false, [&amp;quot;cohorte&amp;quot;]=false, [&amp;quot;super-cohorte&amp;quot;]=false, [&amp;quot;infra-classe&amp;quot;]=false, [&amp;quot;sous-classe&amp;quot;]=false,&lt;br /&gt;
 [&amp;quot;classe&amp;quot;]=false, [&amp;quot;super-classe&amp;quot;]=false, [&amp;quot;infra-embranchement&amp;quot;]=false, [&amp;quot;sous-embranchement&amp;quot;]=false, [&amp;quot;embranchement&amp;quot;]=false,&lt;br /&gt;
 [&amp;quot;super-embranchement&amp;quot;]=false, [&amp;quot;sous-division&amp;quot;]=false, [&amp;quot;division&amp;quot;]=false, [&amp;quot;super-division&amp;quot;]=false, [&amp;quot;infra-règne&amp;quot;]=false,&lt;br /&gt;
 [&amp;quot;rameau&amp;quot;]=false, [&amp;quot;sous-règne&amp;quot;]=false, [&amp;quot;règne&amp;quot;]=false, [&amp;quot;super-règne&amp;quot;]=false, [&amp;quot;sous-domaine&amp;quot;]=false,&lt;br /&gt;
 [&amp;quot;domaine&amp;quot;]=false, [&amp;quot;empire&amp;quot;]=false&lt;br /&gt;
}&lt;br /&gt;
-- retourne true si rang+regne a besoin de l'italique&lt;br /&gt;
function p.rang_regne_it(rang, regne)&lt;br /&gt;
    if (rang == nil or rang == &amp;quot;&amp;quot; or regne == nil or regne == &amp;quot;&amp;quot;) then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    local reg = p.regnes[regne]&lt;br /&gt;
    if (reg == nil) then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    if (reg == true) then&lt;br /&gt;
        return true -- tout en italique&lt;br /&gt;
    end&lt;br /&gt;
    local rag = p.rangs[rang]&lt;br /&gt;
    if (rag == nil) then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    if (rag == true) then&lt;br /&gt;
        return true&lt;br /&gt;
    else&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- met un nom scientifique en italique, en respectant les conventions.&lt;br /&gt;
-- cette fonction met en italique sans condition.&lt;br /&gt;
-- cette fonction présume que le nom passé est *uniquement* un nom scientifique (pas de partie homonyme)&lt;br /&gt;
-- la partie rang est utilisée pour détecter les &amp;quot;clades&amp;quot; en français&lt;br /&gt;
function p.italique_biologique(nom, rang, regne)&lt;br /&gt;
    if (nom == nil or nom == &amp;quot;&amp;quot;) then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- si pas besoin de l'italique on laisse&lt;br /&gt;
    local it = p.rang_regne_it(rang, regne)&lt;br /&gt;
    if (it == nil or it == false) then&lt;br /&gt;
        return '&amp;lt;span style=&amp;quot;font-style: normal&amp;quot;&amp;gt;' .. nom .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- si rang=clade et qu'on détecte que c'est du français on laisse sans modifier&lt;br /&gt;
    if (rang == &amp;quot;clade&amp;quot;) then&lt;br /&gt;
        if (p.clade_francais(nom)) then&lt;br /&gt;
            return '&amp;lt;span style=&amp;quot;font-style: normal&amp;quot;&amp;gt;' .. nom .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- on remplace dans le nom toutes les occurrences à protéger&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while(p.exclude[i] ~= nil) do&lt;br /&gt;
        nom = mw.ustring.gsub(nom, p.exclude[i][1], p.exclude[i][2])&lt;br /&gt;
        i = i + 1    &lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- on retourne la partie traitée&lt;br /&gt;
    -- en insérant les italiques au début et à la fin&lt;br /&gt;
    -- attention : si on a traité un élément au tout début (ou fin) il faut le virer et ne&lt;br /&gt;
    -- pas remettre de '' au début (ou fin)&lt;br /&gt;
    local deb = &amp;quot;''&amp;quot;&lt;br /&gt;
    local fin = &amp;quot;''&amp;quot;&lt;br /&gt;
    if (mw.ustring.find(nom, &amp;quot;^''&amp;quot;)) then&lt;br /&gt;
        nom = mw.ustring.sub(nom, 3) -- on supprime les 2 1er&lt;br /&gt;
        deb = &amp;quot;&amp;quot; -- pas au début&lt;br /&gt;
    end&lt;br /&gt;
    if (mw.ustring.find(nom, &amp;quot;''$&amp;quot;)) then&lt;br /&gt;
        nom = mw.ustring.sub(nom, 1, -3) -- on supprime les 2 derniers&lt;br /&gt;
        fin = &amp;quot;&amp;quot; -- pas à la fin&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return '&amp;lt;span lang=&amp;quot;la&amp;quot;&amp;gt;' .. deb .. nom .. fin .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- traite un nom scientifique pour la mise en italique&lt;br /&gt;
function p.ns(frame)&lt;br /&gt;
    -- on récupère le rang (si cultivar, fonction dédiée)&lt;br /&gt;
    local rang = mw.ustring.lower(mw.text.trim(frame.args[&amp;quot;rang&amp;quot;] or &amp;quot;&amp;quot;))&lt;br /&gt;
    -- on récupère le règne&lt;br /&gt;
    local regne = mw.ustring.lower(mw.text.trim(frame.args[&amp;quot;règne&amp;quot;] or &amp;quot;&amp;quot;))&lt;br /&gt;
    -- juste un wrapper&lt;br /&gt;
    if (rang == &amp;quot;cultivar&amp;quot;) then&lt;br /&gt;
        return ( p.italique_cultivar(p.trim(frame.args[1] or frame:getParent().args[1] or &amp;quot;&amp;quot;)) )&lt;br /&gt;
    else&lt;br /&gt;
        return ( p.italique_biologique(p.trim(frame.args[1] or frame:getParent().args[1] or &amp;quot;&amp;quot;), rang, regne) )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- traite la mise en italiques d'un nom de cultivar. La forme est &amp;quot;XXXXX 'YYY'&amp;quot; (apostrophe simple ou typographique)&lt;br /&gt;
-- l'italique n'est que sur la première partie. Retourne nil si cette forme n'est pas détectée&lt;br /&gt;
function p.italique_cultivar(nom)&lt;br /&gt;
    if (nom == nil or nom == &amp;quot;&amp;quot; or type(nom) ~= &amp;quot;string&amp;quot;) then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- on verifie que le nom se termine par ' ou ’&lt;br /&gt;
    local der = mw.ustring.sub(nom, -1)&lt;br /&gt;
    if (der ~= &amp;quot;'&amp;quot; and der ~= &amp;quot;’&amp;quot;) then&lt;br /&gt;
        return nil -- pas bon&lt;br /&gt;
    end&lt;br /&gt;
    -- on cherche la partie YYY&lt;br /&gt;
    local pd1, pf1 = mw.ustring.find(nom, &amp;quot;['].*[']$&amp;quot;)&lt;br /&gt;
    local pd2, pf2 = mw.ustring.find(nom, &amp;quot;[‘].*[’]$&amp;quot;)&lt;br /&gt;
    if (pd1 == nil and pd2 == nil) then&lt;br /&gt;
        return nil -- pas trouvé&lt;br /&gt;
    end&lt;br /&gt;
    local debut = pd1 or pd2&lt;br /&gt;
    local fin = pf1 or pf2&lt;br /&gt;
    &lt;br /&gt;
    -- on récupère le début (à mettre en italiques)&lt;br /&gt;
    local part1 = mw.ustring.sub(nom, 1, debut-1)&lt;br /&gt;
    if (part1 == nil or part1 == &amp;quot;&amp;quot;) then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    local itpart1 = p.italique_biologique(part1, &amp;quot;espèce&amp;quot;, &amp;quot;animal&amp;quot;)&lt;br /&gt;
    local reste = mw.ustring.sub(nom, debut)&lt;br /&gt;
    return itpart1 .. reste&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- traite un nom de cultivar pour la mise en italique&lt;br /&gt;
function p.nc(frame)&lt;br /&gt;
    -- juste un wrapper&lt;br /&gt;
    return ( p.italique_cultivar(p.trim(frame.args[1] or frame:getParent().args[1] or &amp;quot;&amp;quot;)) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- applique la forme italique pour le titre de l'article (DISPLAYTITLE) à partir du&lt;br /&gt;
-- nom scientifique reçu en paramètre. Gère la partie homonymie. Détecte un NV&lt;br /&gt;
function p.titre(frame)&lt;br /&gt;
    local ttr&lt;br /&gt;
    local cat = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- le nom scientifique&lt;br /&gt;
    local ns = p.trim(frame.args[1] or frame:getParent().args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
    if (ns == nil or ns == &amp;quot;&amp;quot;) then&lt;br /&gt;
        -- pas de nom scientifique, on ne peut pas travailler&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- on récupère règne et rang si présents&lt;br /&gt;
    local regne = frame.args[&amp;quot;règne&amp;quot;] or frame:getParent().args[&amp;quot;règne&amp;quot;]&lt;br /&gt;
    local rang = frame.args[&amp;quot;rang&amp;quot;] or frame:getParent().args[&amp;quot;rang&amp;quot;]&lt;br /&gt;
    regne = mw.text.trim(regne or &amp;quot;&amp;quot;)&lt;br /&gt;
    rang = mw.text.trim(rang or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- test temporaire : si le nom scientifique contient de la mise en forme&lt;br /&gt;
    -- on range l'article dans une catégorie pour les détecter&lt;br /&gt;
    --- selon les combinaisons règne+rang on fait des choses différentes&lt;br /&gt;
    local a_tester = &amp;quot;[[{'†éèêëàâäùüûçîïôö]&amp;quot;&lt;br /&gt;
    if (regne == &amp;quot;virus&amp;quot;) then&lt;br /&gt;
        a_tester = nil -- on trouve de tout dans les virus&lt;br /&gt;
    end&lt;br /&gt;
    if (rang == &amp;quot;clade&amp;quot;) then&lt;br /&gt;
        a_tester = &amp;quot;[[{'†]&amp;quot; -- pour les clades les noms peuvent être en français&lt;br /&gt;
    end&lt;br /&gt;
    if (regne == &amp;quot;animal&amp;quot; and rang == &amp;quot;hybride&amp;quot;) then&lt;br /&gt;
        a_tester = &amp;quot;[[{'†]&amp;quot; -- pour les hybrides animaux les noms peuvent être en français&lt;br /&gt;
    end&lt;br /&gt;
    if (rang == &amp;quot;cultivar&amp;quot;) then&lt;br /&gt;
        a_tester = &amp;quot;[[{†]&amp;quot; -- les cultivars contiennent des ' ou ‘’&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- seulement si on a un test à faire&lt;br /&gt;
    if (a_tester ~= nil) then&lt;br /&gt;
        local tst = mw.ustring.find(ns, a_tester)&lt;br /&gt;
        if (tst) then&lt;br /&gt;
            cat = &amp;quot;{{Article de Biologie à corriger|clef=NS|&amp;quot;&lt;br /&gt;
                 .. &amp;quot;doc=Modèle:Taxobox taxon|message=Nom de taxon '&amp;quot;&lt;br /&gt;
                 .. mw.text.nowiki(ns) .. &amp;quot;' non reconnu}}&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- spécial : si paramètre &amp;quot;titre&amp;quot; → on utilise à la place&lt;br /&gt;
    local ft = frame.args[&amp;quot;titre&amp;quot;] or frame:getParent().args[&amp;quot;titre&amp;quot;]&lt;br /&gt;
    if (ft) then&lt;br /&gt;
        -- titre forcé : on l'utilise à la place du titre réel&lt;br /&gt;
        -- et on ne vérifie pas le namespace&lt;br /&gt;
        ttr = ft&lt;br /&gt;
    else&lt;br /&gt;
        -- le titre&lt;br /&gt;
        local titre = mw.title.getCurrentTitle()&lt;br /&gt;
        if (titre.namespace ~= 0) then&lt;br /&gt;
            -- seulement les articles !&lt;br /&gt;
            return &amp;quot;&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        ttr = titre.text&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (ttr == ns) then&lt;br /&gt;
        -- titre exactement NS → direct&lt;br /&gt;
        if (ft) then&lt;br /&gt;
            if (rang == &amp;quot;cultivar&amp;quot;) then&lt;br /&gt;
                return frame:preprocess(&amp;quot;&amp;lt;nowiki&amp;gt;&amp;quot; .. cat .. &amp;quot;{{DISPLAYTITLE:&amp;quot; .. p.italique_cultivar(ns) .. &amp;quot;|noerror}}&amp;lt;/nowiki&amp;gt;&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                return frame:preprocess(&amp;quot;&amp;lt;nowiki&amp;gt;&amp;quot; .. cat .. &amp;quot;{{DISPLAYTITLE:&amp;quot; .. p.italique_biologique(ns, rang, regne) .. &amp;quot;|noerror}}&amp;lt;/nowiki&amp;gt;&amp;quot;)&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            if (rang == &amp;quot;cultivar&amp;quot;) then&lt;br /&gt;
                return frame:preprocess(cat .. &amp;quot;{{DISPLAYTITLE:&amp;quot; .. p.italique_cultivar(ns) .. &amp;quot;|noerror}}&amp;quot;)&lt;br /&gt;
            else&lt;br /&gt;
                return frame:preprocess(cat .. &amp;quot;{{DISPLAYTITLE:&amp;quot; .. p.italique_biologique(ns, rang, regne) .. &amp;quot;|noerror}}&amp;quot;)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- si le titre est plus court que le NS ça ne peut être NS+homonymie&lt;br /&gt;
    local lng = mw.ustring.len(ns)&lt;br /&gt;
    if ((mw.ustring.len(ttr) &amp;lt;= lng) and (cat ~= &amp;quot;&amp;quot;)) then&lt;br /&gt;
        if (ft) then&lt;br /&gt;
            return frame:preprocess(&amp;quot;&amp;lt;nowiki&amp;gt;&amp;quot; .. cat .. &amp;quot;&amp;lt;/nowiki&amp;gt;&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            return frame:preprocess(cat) -- on ne fait rien&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- on récupère les 'lng' premiers caractères du titre : ça doit être égal au NS&lt;br /&gt;
    -- sinon ça veut dire que ce n'est pas NS+homonymie&lt;br /&gt;
    local p1 = mw.ustring.sub(ttr, 1, lng)&lt;br /&gt;
    if (p1 ~= ns) then&lt;br /&gt;
    	if (cat ~= &amp;quot;&amp;quot;) then&lt;br /&gt;
        	return frame:preprocess(cat) -- on ne fait rien&lt;br /&gt;
    	else&lt;br /&gt;
    		return &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- la partie homonymie seule&lt;br /&gt;
    local hom = mw.ustring.sub(ttr, lng+1)&lt;br /&gt;
    &lt;br /&gt;
    -- on valide que la partie homonymie contient des ()&lt;br /&gt;
    local tst = mw.ustring.find(ttr, &amp;quot;[(]&amp;quot;)&lt;br /&gt;
    if ((tst == nil) and (cat ~= &amp;quot;&amp;quot;)) then&lt;br /&gt;
        -- pas de parenthèse, ce n'est pas NS + homonymie&lt;br /&gt;
        return frame:preprocess(cat) -- on ne touche rien&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- on retourne la mise en forme du NS italique + la partie homonymie&lt;br /&gt;
    if (ft) then&lt;br /&gt;
        if (rang == &amp;quot;cultivar&amp;quot;) then&lt;br /&gt;
            return frame:preprocess(&amp;quot;&amp;lt;nowiki&amp;gt;&amp;quot; .. cat .. &amp;quot;{{DISPLAYTITLE:&amp;quot; .. p.italique_cultivar(ns) .. hom .. &amp;quot;|noerror}}&amp;lt;/nowiki&amp;gt;&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            return frame:preprocess(&amp;quot;&amp;lt;nowiki&amp;gt;&amp;quot; .. cat .. &amp;quot;{{DISPLAYTITLE:&amp;quot; .. p.italique_biologique(ns, rang, regne) .. hom .. &amp;quot;|noerror}}&amp;lt;/nowiki&amp;gt;&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        if (rang == &amp;quot;cultivar&amp;quot;) then&lt;br /&gt;
            return frame:preprocess(cat .. &amp;quot;{{DISPLAYTITLE:&amp;quot; .. p.italique_cultivar(ns) .. hom .. &amp;quot;|noerror}}&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            return frame:preprocess(cat .. &amp;quot;{{DISPLAYTITLE:&amp;quot; .. p.italique_biologique(ns, rang, regne) .. hom .. &amp;quot;|noerror}}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- met un nom scientifique en italique, en respectant les conventions. Utilisable uniquement :&lt;br /&gt;
--  - dans le modèle {{taxobox}} car il utilise une syntaxe HTML et non wiki pour tenir compte du style CSS associé&lt;br /&gt;
--  - sur des taxons qui sont à coup sur en italiques (inf. au genre) car ne sait pas quelles sont les conditions autour&lt;br /&gt;
--  - ne gère pas la partie homonymie (pas supposé se rencontrer dans les noms de taxon)&lt;br /&gt;
function p.italique_taxon(nom, rang)&lt;br /&gt;
    if (nom == nil or nom == &amp;quot;&amp;quot;) then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- si c'est un clade et détecté français on enlève l'italique&lt;br /&gt;
    if (rang == &amp;quot;clade&amp;quot;) then&lt;br /&gt;
        if (p.clade_francais(nom)) then&lt;br /&gt;
            return '&amp;lt;span style=&amp;quot;font-style: normal&amp;quot;&amp;gt;' .. nom .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- on remplace dans le nom toutes les occurrences à protéger&lt;br /&gt;
    local i = 1&lt;br /&gt;
    while(p.exclude[i] ~= nil) do&lt;br /&gt;
        nom = mw.ustring.gsub(nom, p.exclude_span[i][1], p.exclude_span[i][2])&lt;br /&gt;
        i = i + 1&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return nom&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- wrapper&lt;br /&gt;
function p.nt(frame)&lt;br /&gt;
    local nom = mw.text.trim(frame.args[1] or frame:getParent().args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
    if (nom == &amp;quot;&amp;quot;) then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    local nom2 = mw.text.trim(frame.args[2] or frame:getParent().args[2] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local rang = mw.text.trim(frame.args[3] or frame:getParent().args[3] or &amp;quot;&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    local resu&lt;br /&gt;
    if (nom2 == &amp;quot;&amp;quot;) then&lt;br /&gt;
        resu = p.italique_taxon(nom, rang)&lt;br /&gt;
    else&lt;br /&gt;
        resu = p.italique_taxon(nom2, rang)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if (nom == resu) then&lt;br /&gt;
        return &amp;quot; [[&amp;quot; .. resu .. &amp;quot;]]&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        return frame:preprocess(&amp;quot; [[&amp;quot; .. nom .. &amp;quot;|&amp;quot; .. resu .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- module&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Jacques Ducloy</name></author>
		
	</entry>
</feed>