import re

slide = r'''
<s>
    <cha>Variables aléatoires</cha>
    <os>
        <o>Généralités</o>
        <o>Loi de probabilité</o>
        <o>Tendance centrale et dispersion</o>
        <o>Linéarité de l'espérance</o>
    </os>
</s>

<s>
    <par>1. Généralités</par>
</s>

<s>
    <ti>1.1 Variable aléatoire</ti>
    <d>
        <t>
            <n>On considère une expérience aléatoire associée à un univers $\Omega$ (fini) </n><n>sur lequel on a défini une probabilité $P$.<br></n>
            <n>Une <e>variable aléatoire</e> $X$</n><n> est une <e>fonction</e> définie sur $\Omega$ </n><n>et à valeurs dans $\mathbb{R}$, </n><n>qui à tout élément de $\Omega$ fait correspondre un nombre réel.</n>
            $$<n>X : \Omega \longmapsto \mathbb{R}</n>$$
        </t>
    </d>
    </rq>    
    <ul>
        <li>
            <t><n>Comme $\Omega$ est fini, </n><n>l'ensemble des valeurs prises par $X$, </n><n>c'est-à-dire des images par $X$, </n><n>est fini.<br> </n><n>On parle de variable alors aléatoire <e>discrète</e>.<br></n>
            <n>(par opposition par exemple au temps d'attente à une caisse qui est une variable aléatoire <i>continue</i>)</n></t>
        </li>
        <li>
            <t><n>Pour une même expérience aléatoire, </n><n>on peut définir plusieurs variables aléatoires. </n><n>(Par exemple, la somme ou le produit des résultats de deux dés)</n></t>
        </li>
    </ul>    
</s>

<s>
    <d>
        </rq>
        <t><n>Soit $a$ un nombre réel, on note : </n>
        <ul>
            <li>
                <t><n>$\{X = a\}$ l'événement </n><n>« la variable aléatoire $X$ prend la valeur $a$ » ;</n></t>
            </li>
            <li>
                <t><n>$\{X \ge a\}$ </n><n>l'événement « la variable aléatoire $X$ prend une valeur supérieure ou égale à $a$ ».</n></t>
            </li>
        </ul>
        </t>        
    </d>

    <rq/>
    <t>
        <n>On peut définir de manière analogue les événements :</n><n> $\{X > a\}$, $\{X < a\}$ et $\{X \le a\}$.</n>
    </t>

</s>


<s>
    <ti>1.2 Loi de probabilité d'une variable aléatoire</ti>
    <d>
        <t>
            <n>Soit $X$ une variable aléatoire définie sur $\Omega$.<br> </n>
            <n>Définir la loi de probabilité de $X$, </n><n>c'est <e>associer</e> à chacune des valeurs prises par $X$ </n><n>sa <e>probabilité</e>.<br></n>
            <n>Autrement dit, </n><n>en notant $x_1, x_2, \ldots, x_n$ les valeurs prises par $X$,</n><n> c'est donner les valeurs des probabilités :</n>
            $$<n>p_i=P(X = x_i)</n>$$
            <n>pour tout entier $i$, où $1 \le i \le n$.<br></n>
        </t>
    </d>

    <rq/>
    <t>
        <n>On présente en général une loi de probabilité sous forme d'un tableau :</n>
        <n>
        <table>
        <thead>
        <tr>
        <th><strong>Valeurs</strong></th>
        <th>$x_1$</th>
        <th>$x_2$</th>
        <th>$\cdots$</th>
        <th>$x_{n-1}$</th>
        <th>$x_n$</th>
        </tr>
        </thead>
        <tbody><tr>
        <td><strong>Probabilités</strong></td>
        <td>$p_1$</td>
        <td>$p_2$</td>
        <td>$\cdots$</td>
        <td>$p_{n-1}$</td>
        <td>$p_n$</td>
        </tr>
        </tbody></table><br>
        </n>
    </t>
    
</s>

<s>
    <p>
        <t>
            <n>Dans le tableau qui donne la loi de probabilité d'une variable aléatoire, </n><n>la <e>somme des probabilités</e> est égale à $1$.<br><br></n>
            <n>Ainsi, si l'on note $x_1, x_2, \ldots, x_n$ les valeurs prises par $X$, on a :</n>
            $$
            <n>p_1 + p_2 + \cdots + p_{n-1}+p_n </n><n>=\sum_{i\, = \,1}^{n} p_i</n><n>= 1</n>            
            $$
        </t>
    </p>
</s>

<s>
    <pr/>
    <t>
        <n>Par définition de la loi de probabilité $P$, </n><n>la <e>somme</e> des probabilités </n><n>de tous les événements élémentaires est égale à $1$.</n><br><br>
        <n>Quant à la variable aléatoire $X$, </n><n>à chaque événement élémentaire de $\Omega$,</n> <n>on associe une valeur $x_i$, </n><n>de sorte que les événements 
        $\{X = x_1\}, \{X = x_2\}, \ldots, \{X = x_n\}$ forment </n><n>une <e>partition</e> de l'univers $\Omega$.<br><br></n>
        <n>Ainsi, </n><n>la somme des probabilités des événements $\{X = x_i\}$ est égale à $1$.</n>
    </t>

</s>
<s>
    <ex/>
    <t>
        <n>Un jeu consiste à lancer deux pièces de monnaie équilibrées différentes.<br></n>
        <n>On note $F$ quand on obtient Face et $P$ quand on obtient Pile.</n>
        <n>Les quatre issues de l'expérience forment l'univers : </n>
        $$
        <n>\Omega = \{ FF \,;\, FP \,;\, PF \,;\, PP \}</n>
        $$

        <n>Les gains <e>algébriques</e> sont donnés par :</n>
    </t>
    
        <ul>
            <li>
                <t>à chaque Pile obtenue, on gagne 3 euros ;</t>
            </li>
            <li>
                <t>à chaque Face obtenue, on perd 1 euro.</t>
            </li>
        </ul>
    <t>
        <n>On note $X$ la variable aléatoire </n><n>représentant le gain algébrique du joueur en euro.<br></n>
        <n>La variable aléatoire $X$ prend les valeurs $-2$, $2$ et $6$.<br></n>
        <n>L'écriture $\{X \geq 5\}$</n><n> représente l'événement « obtenir un gain supérieur ou égal à 5 euros ».<br></n>
        <n>Ainsi :</n>
        $$<n>\{X \geq 5\} = \{\omega \in \Omega \; | \; X(\omega) \geq 5 \} </n><n>= \{\omega \in \Omega \; | \; X(\omega) = 6 \}</n><n> =  \{ PP \}</n>$$

        <n>De même, </n><n>réaliser l'événement $\{X = -2\}$, </n><n>c'est obtenir l'issue $FF$ puisque :</n>
        $$<n>\{X = -2\} =</n><n> \{\omega \in \Omega \; | \; X(\omega) = -2\}</n><n>=  \{ FF \}</n>$$

    </t>
    </s>


    <s>
        <t>
        <n>La loi de probabilité de la variable aléatoire $X$ peut être résumée dans le tableau suivant :</n>
        <n>        
        <table>
        <thead>
        <tr>
        <th><strong>Valeurs</strong></th>
        <th>$-2$</th>
        <th>$2$</th>
        <th>$6$</th>
        </tr>
        </thead>
        <tbody><tr>
        <td><strong>Probabilités</strong></td>
        <td>$\frac{1}{4}$</td>
        <td>$\frac{1}{2}$</td>
        <td>$\frac{1}{4}$</td>
        </tr>
        </tbody></table>
        </n>

        <n>On peut alors vérifier :</n>
        $$
        <n>\sum_{i\,=\,1}^3 p_i </n><n>= p_1+p_2+p_3</n><n>=\dfrac{1}{4} + \dfrac{1}{2} + \dfrac{1}{4} = 1</n>
        $$

    </t>
        
</s>
<s>
    <par>2. Espérance, linéarité</par>
</s>

<s>
    <ti>2.1 Espérance</ti>
    <d>
        <t>
            <n>Soit $X$ une variable aléatoire définie sur un univers $\Omega$ </n><n>et dont la loi de probabilité est donnée par le tableau suivant :</n>
            <n>
            <table>
            <thead>
            <tr>
            <th><strong>Valeurs</strong></th>
            <th>$x_1$</th>
            <th>$x_2$</th>
            <th>$\cdots$</th>
            <th>$x_{n-1}$</th>
            <th>$x_n$</th>
            </tr>
            </thead>
            <tbody><tr>
            <td><strong>Probabilités</strong></td>
            <td>$p_1$</td>
            <td>$p_2$</td>
            <td>$\cdots$</td>
            <td>$p_{n-1}$</td>
            <td>$p_n$</td>
            </tr>
            </tbody></table><br>
        </n>
            <n>L'<e>espérance</e> de la variable aléatoire $X$ est le réel noté </n><n>$E(X)$ </n><n>défini par :</n>
            $$<n>E(X) = \sum_{i\,=\,1}^{n} p_i x_i=p_1 x_1 + p_2 x_2 + \cdots + p_n x_n</n>$$
        </t>
    </d>

    <rq/>
    <t>
        <n>L'espérance s'interprète comme </n><n>la valeur moyenne prise par la variable aléatoire $X$ </n><n>lorsque l'on répète un grand nombre de fois l'expérience.</n>
    </t>
</s>

<s>
    <ex/>
    <t>
        <n>La loi de la variable aléatoire $X$ donnant le gain du joueur, en euro, est donnée par :</n>
        <n>
        <table>
        <thead>
        <tr>
        <th><strong>Valeurs</strong></th>
        <th>$-2$</th>
        <th>$2$</th>
        <th>$6$</th>
        </tr>
        </thead>
        <tbody><tr>
        <td><strong>Probabilités</strong></td>
        <td>$\frac{1}{4}$</td>
        <td>$\frac{1}{2}$</td>
        <td>$\frac{1}{4}$</td>
        </tr>
        </tbody>
        </table>
        </n>
        <n>On a :</n>
        $$
        <n>E(X) = p_1 x _1 + p_2 x_2 + p_3 x_3 </n><n>= \dfrac{1}{4} \times (-2) + \dfrac{1}{2} \times 2 + \dfrac{1}{4} \times 6</n><n> = 2</n>
        $$


        <n>Un joueur peut espérer obtenir, en moyenne, sur un grand nombre de parties, deux euros par partie.</n>
    </t>
</s>

<s>
    <p>
        <t>
            <n>Plus généralement, si la variable étudiée désigne un </n><n>gain <e>algébrique</e></n>, <n>alors :</n>
        </t>
        <ul>
            <li>
                <t>Si $E(X) > 0$, le jeu est <e>avantageux</e> pour le joueur.</t>
            </li>
            <li>
                <t>Si $E(X) = 0$, le jeu est <e>équitable</e> pour le joueur.</t>
            </li>
            <li>
                <t>Si $E(X) < 0$, le jeu est <e>désavantageux</e> pour le joueur.</t>
            </li>
        </ul>
    </p>
</s>


<s>
    <ti>2.2 Linéarité de l'espérance</ti>
    <d>
        <t>
            <n>Si $a$ et $b$ sont deux réels, </n><n>on peut définir sur $\Omega$ une nouvelle variable aléatoire</n><n> $Y = aX + b$, </n>
            <n>dont les images sont :</n>
            $$<n>y_i = a x_i + b</n>$$
            <n>pour tout entier $i$ de $1$ à $n$.</n>
        </t>
    </d>

    <p>
        <t>
            <n>Soient $a$ et $b$ deux réels, </n><n>on pose $Y = aX + b$, </n><n>alors :</n>
            $$<n>E(Y) = aE(X) + b </n>$$
        </t>
    </p>

</s>



<s>

    
    <pr/>
    <t>
        <n>La loi de probabilité de la variable aléatoire $Y$ est donnée par le tableau suivant :</n>
        <n>
        <table>
        <thead>
        <tr>
        <th><strong>Valeurs</strong></th>
        <th>$a x_1 + b$</th>
        <th>$a x_2 + b$</th>
        <th>$\cdots$</th>
        <th>$a x_{n-1} + b$</th>
        <th>$a x_n + b$</th>
        </tr>
        </thead>
        <tbody><tr>
        <td><strong>Probabilités</strong></td>
        <td>$p_1$</td>
        <td>$p_2$</td>
        <td>$\cdots$</td>
        <td>$p_{n-1}$</td>
        <td>$p_n$</td>
        </tr>
        </tbody></table><br>
        </n>

        <n>On a alors :</n>
        $$<n>E(Y) = p_1 (ax_1 + b) + p_2 (ax_2 + b) + \cdots + p_n (ax_n + b)</n>$$
        <n>ou encore :</n>
        $$<n>a(p_1 x_1 + p_2 x_2 + \cdots + p_n x_n) + b(p_1 + p_2 + \cdots + p_n)</n>$$
        <n>Or, par définition :</n>
        $$<n>p_1 + p_2 + \cdots + p_n = 1 \qquad p_1 x_1 + p_2 x_2 + \cdots + p_n x_n = E(X)</n>$$
        <n>On en déduit que :</n>
        $$<n>E(Y) = aE(X) + b \times 1 = aE(X) + b</n>$$
    </t>

</s>

<s>
    <rq/>
    <ul>
        <li>
            <t><n>Considérons le jeu suivant, </n><n>pour lequel la mise de départ est de $m=8$ euros.</n></t>
        </li>
        <li>
            <t><n>On lance un dé non truqué à 6 faces, </n><n>on gagne alors le double du numéro obtenu.</n></t>
        </li>
        <li>
            <t><n>Ensuite, </n><n>on tire une boule dans une urne qui contient $4$ boules noires et une blanche, </n><n>on gagne alors $1$ euro si la boule tirée est noire et $7$ euros sinon.</n></t>
        </li>
    </ul>
    <br><br>
    <t>
        <n>Réalisons une <e>simulation</e> </n><n>pour conjecturer le <e>gain moyen</e>.</n>
    </t>
</s>

<s>
    <py>
from random import randint

def esperance_jeu(nb_sim, mise):
    gain_total = 0
    for _ in range(nb_sim):
        gain = -mise
        x = randint(1, 6)
        gain += 2 * x
        y = randint(1, 5)
        gain += 1 if y <= 4 else 7
        gain_total += gain
    gain_moyen = gain_total / nb_sim
    return gain_moyen

print(esperance_jeu(10**5, 8))
    </py>
    <a href="https://[Log in to view URL]" target="_blank">Lien</a>
</s>

<s>
    <rq/>
    <t><n>Avec la simulation précédente, </n><n>on trouve pour $n=100000$ environ $1,2$.<br></n>
    
        <n>Remarquons d'abord que le gain algébrique associé à ce jeu peut s'écrire sous la forme :</n>
        $$<n>G=-m+2X+Y \quad(*)</n>$$
        <n>où $m$ est la mise de départ, </n><n>$X$ le résultat du lancer d'un dé à $6$ faces </n><n>et $Y$
        le gain du jeu correspondant au tirage dans l'urne.<br></n>
        <n>Or nous avons (déjà) vu :</n>
        $$
        <n>E(X)=\frac{1}{6}\times 1+\frac{1}{6}\times 2+\cdots +\frac{1}{6}\times 6=3,5</n> <n> \qquad E(Y)=\frac{4}{5}\times 1 +\frac{1}{5}\times 7=2,2</n>
        $$
        <n>D'après la <e>linéarité de l'espérance </e>:</n>
        $$<n>E(G)=-m+2E(X)+E(Y)</n><n>=-8+2\times 3,5 +2,2</n><n>=1,2 </n>$$
    </t>
    
</s>

<s>
    <par>3. Variance et écart type</par>
</s>
<s>
    <ti>3.1 Variance et écart-type</ti>
    <d>
        <t>
            <n>La <e>variance</e> de la variable aléatoire $X$</n><n> est le réel positif noté $V(X)$ défini par :</n>
            $$<n>V(X) = p_1 (x_1 - E(X))^2 + \cdots + p_n (x_n - E(X))^2</n>$$

            <n>Ce que l'on peut noter :</n>
            $$<n>V(X) = \sum_{i\,=\,1}^{n} p_i (x_i - E(X))^2</n>$$

            <n>L'<e>écart type</e>, </n><n>noté $\sigma(X)$, </n><n>est le réel égal à </n><n>la <e>racine carrée</e> de la variance :</n>
            $$<n>\sigma(X) = \sqrt{V(X)}</n>$$
        </t>
    </d>
</s>

<s>
    <rq/>
    <ul>
        <li>
            <t><n>La variance représente la </n><n><e>moyenne des carrés des écarts à l'espérance $E(X)$</e>.</n></t>
        </li>
        <li>
            <t><n>Elle mesure la </n><n><e>dispersion</e> </n><n>des valeurs prises par la variable aléatoire $X$</n><n> autour de son espérance $E(X)$.</n></t>
        </li>
        <li>
            <t>
                <n>On peut noter également :</n> 
                $$<n>V(X)=E(X-E(X))^2</n>$$
            </t>
        </li>
    </ul> 
</s>

<s>
    <ex/>
    <t>
        <n>Reprenons la variable aléatoire étudiée dans le paragraphe précédent :</n>
        <n>
        <table>
        <thead>
        <tr>
        <th><strong>Valeurs</strong></th>
        <th>$-2$</th>
        <th>$2$</th>
        <th>$6$</th>
        </tr>
        </thead>
        <tbody><tr>
        <td><strong>Probabilités</strong></td>
        <td>$\frac{1}{4}$</td>
        <td>$\frac{1}{2}$</td>
        <td>$\frac{1}{4}$</td>
        </tr>
        </tbody>
        </table>
        </n>
        <n>Nous avions trouvé $E(X)=2$, on a :</n>
        $$
        <n>V(X) = p_1(x_1 - E(X))^2 + p_2(x_2 - E(X))^2 +p_3(x_3 - E(X))^2 </n><n>= \dfrac{1}{4}(-2 - 2)^2 + \dfrac{1}{2}(2 - 2)^2 + \dfrac{1}{4}(6 - 2)^2 </n><n>= 8</n>
        $$
        <n>On en déduit :</n>
        $$
        <n>\sigma(X) = \sqrt{V(X)} </n><n>= \sqrt{8} = 2\sqrt{2} </n><n>\approx 2,8</n>
        $$

        <n>On observe une fluctuation importante autour de l'espérance d'environ 2,8 euros.</n>
    </t>
</s>

<s>
    <ti>3.2 Formule de König Huygens</ti>
    <p>
        <t>
            <n>Soit $X$ une v.a,  alors avec les notations précédentes :</n>
            $$<n>V(X)=\sum_{i\,=\,1}^n p_i x_i^2 -E(X)^2 </n><n>= E(X^2)-E(X)^2</n>$$
        </t>
    </p>
    <rq />
    <t>
        <n>La variance apparait comme la </n><n>"différence entre la moyenne des carrés et</n><n> le carré de la moyenne".</n>
    </t>
</s>

<s>
    <ex/>
    <t>
        <n>Reprenant l'exemple précédent :</n>
        <n>
        <table>
        <thead>
        <tr>
        <th><strong>Valeurs</strong></th>
        <th>$-2$</th>
        <th>$2$</th>
        <th>$6$</th>
        </tr>
        </thead>
        <tbody><tr>
        <td><strong>Probabilités</strong></td>
        <td>$\frac{1}{4}$</td>
        <td>$\frac{1}{2}$</td>
        <td>$\frac{1}{4}$</td>
        </tr>
        </tbody>
        </table>
        </n>
        <n>On a donc également d'après cette proposition :</n>
        $$<n>V(X)=E(X^2)-E(X)^2</n><n>=(-2)^2 \times \frac{1}{4}+2^2 \times \frac{1}{2}+6^2 \times \frac{1}{4} -2^2</n><n>=1+2+9-4=8</n>$$
    </t>
</s>
<s>
    <ex/>
    <t>
        <n>Soit $X$ une variable donnant le résultat du lancer d'un dé équilibré à $6$ faces,</n><n> on a d'abord :</n>
        $$<n>E(X)=\sum_{i\,=\,1}^6 p_i x_i</n><n>= \frac{1}{6}\times 1 + \frac{1}{6}\times 2 +\cdots +\frac{1}{6}\times 6 </n><n>=\frac{21}{6}=\frac{7}{2}</n>$$
        <n>D'autre part :</n>
        $$<n>E(X^2)=\sum_{i\,=\,1}^6 p_i x_i^2 </n><n>= \frac{1}{6}\times 1^2 + \frac{1}{6}\times 2^2 +\cdots +\frac{1}{6}\times 6^2</n><n> =\frac{91}{6}</n>$$
        <n>On en déduit :</n>
        $$<n>V(X)=E(X^2)-E(X)^2</n><n>=\frac{91}{6}-\left( \frac{7}{2}\right)^2=\frac{91}{6}-\frac{49}{4}</n><n>=\frac{35}{12}</n>$$
    </t>
</s>

<s>
    <ti>3.2 Propriété de la variance</ti>
    <d>
        <t>
            <n>Si $a$ et $b$ sont deux réels, </n><n>on peut définir sur $\Omega$ une nouvelle variable aléatoire</n><n> $Y = aX + b$, </n>
            <n>dont les images sont :</n>
            $$<n>y_i = a x_i + b</n>$$
            <n>pour tout entier $i$ de $1$ à $n$.</n>
        </t>
    </d>

    <p>
        <t>
            <n>Soient $a$ et $b$ deux réels, </n><n>on pose $Y = aX + b$, </n><n>alors :</n>
            $$<n>V(Y) = a^2 V(X) </n>$$
        </t>
    </p>

    </rq>
    <t>
        <n>La variance n'est pas linéaire contrairement à l'espérance.<br></n>
        <n>Par conséquent, et avec les notations ci-dessus,</n><n> $\sigma(Y) = |a| \, \sigma(X)$.</n>
    </t>
</s>

'''
def dispatch(s):
    def to_frag(txt):
        return re.sub(r"(<n>(?:.|\s)+?<\/n>)", lambda x: f'<n>$\\, \\displaystyle {x.group(1)[3:-4]}$</n>', txt)
    return re.sub(r"(\$\$(?:.|\s)*?\$\$)", lambda x:f'<div class="text-center mt-4 mb-4">{to_frag(x.group(1)[2:-2])}</div>', s)


def make_code(code_str):
    lines = code_str.split('\n')
    n = len(lines)
    sep = '|'.join(f"1-{i}" if i> 1 else "1" for i in range(1, n + 1))
    return f'<div class="text-2xl text-left font-bold mb-8 mt-8">Implémentation Python</div>\n<pre><code data-line-numbers="{sep}" class="language-python">{code_str}</code></pre>'

def make_text(txt):
    txt = re.sub(r"(<e>(?:.|\s)+?<\/e>)", lambda x: f'<span class="emph">{x.group(1)[3:-4]}</span>', txt)
    txt = re.sub(r"(<n>(?:.|\s)+?<\/n>)", lambda x: f'<span class="fragment fade-in">{x.group(1)[3:-4]}</span>', txt)
    return txt
        
def to_fragments(txt):
    return re.sub(r"(<t>(?:.|\s)+?<\/t>)", lambda x: f'<div class="text-left">{make_text(x.group(1)[3:-4])}</div>', txt)
    
def make_objs(t):
    return re.sub(r"(<o>(?:.|\s)+?<\/o>)", lambda x: f'<li class="flex items-center fragment fade-right"><span class="w-6 h-6 rounded bg-blue-800 text-white mr-3 flex items-center justify-center">✓</span><div>{x.group(0)[3:-4]}</div></li>', t)

def make_title(t):
    t = re.sub(r"(<cha>(?:.|\s)+?<\/cha>)", lambda x: f'<div class ="border-[#A5D7FB] border-t-2 border-b-0 border-l-0 border-r-0 mb-24"></div><div class="font-extrabold text-black text-6xl mb-32 fragment fade-up">{x.group(0)[5:-6]}</div>\n', t)  
    fmt = '''<div class="display block bg-blue-50 border p-8 mt-12 border-blue-200 border-t-2 border-b-2 border-r-0 border-l-0 h-40 mx-auto fragment fade-up">
<div class="text-xl flex justify-center text-center items-center -mt-14 px-20 mx-64 py-2 rounded-xl bg-blue-800 text-white font-bold">Objectifs</div>
<ul class="ml-24 text-lg font-semibold mt-12 pt-8 list-inside list-none space-y-1 columns-2">'''
    t = re.sub(r"(<os>(?:.|\s)+?<\/os>)", lambda x: f'''{fmt}{make_objs(x.group(0)[4:-5])}</ul>\n</div>''', t)
    return f'<section>{t}</section>'

    
def make_section(section):
    # proofs, remarks and examples
    section = section.replace("<pr/>", '<div class="text-center align-middle text-white bg-orange-500 p-2 rounded-lg font-bold mb-2 fragment fade-in w-24 shadow-md">Preuve</div>')
    section = section.replace("<rq/>", '<div class="text-left text-orange-500 font-bold mb-2 fragment fade-in">Remarque</div>')
    section = section.replace("<ex/>", '<div class="text-center align-middle text-white bg-green-500 p-2 rounded-lg font-bold mb-2 fragment fade-in w-24 shadow-md">Exemple</div>')
    section = section.replace("<li>", '<li class="fragment fade-in">')
    # paragraphs
    section = re.sub(r"(<par>(?:.|\s)+?<\/par>)", lambda x: f'<div class="text-5xl font-black text-sky-600">{x.group(1)[5:-6]}</div>', section)
    # title
    section = re.sub(r"(<ti>(?:.|\s)+?<\/ti>)", lambda x: f'<div class="text-3xl text-left font-bold text-sky-600 mb-8 fragment fade-in">{x.group(1)[4:-5]}</div>', section)
    # defs
    section = re.sub(r"(<d>(?:.|\s)+?<\/d>)", lambda x: f'<div class="relative border rounded-xl p-8 mt-12 mb-6 w-full bg-green-50 border-green-300 shadow-lg text-left fragment"><div class="absolute -top-5 left-4 px-3 py-3 text-white bg-green-600 font-bold">Définition</div>{to_fragments(x.group(1)[3:-4])}</div>', section)
    # props
    section = re.sub(r"(<p>(?:.|\s)+?<\/p>)", lambda x: f'<div class="relative border rounded-xl p-8 mt-12 mb-6 w-full bg-blue-50 border-blue-300 shadow-lg text-left fragment"><div class="absolute -top-5 left-4 px-3 py-3 text-white bg-blue-600 font-bold">Proposition</div>{to_fragments(x.group(1)[3:-4])}</div>', section)
    # theos
    section = re.sub(r"(<thm>(?:.|\s)+?<\/thm>)", lambda x: f'<div class="relative border rounded-xl p-8 mt-12 mb-6 w-full bg-red-50 border-red-300 shadow-lg text-left fragment"><div class="absolute -top-5 left-4 px-3 py-3 text-white bg-red-600 font-bold">Théorème</div>{to_fragments(x.group(1)[5:-6])}</div>', section)
    # simple txts
    section = to_fragments(section)
    # python snippet
    section = re.sub(r"(<py>(?:.|\s)+?<\/py>)", lambda x: make_code(x.group(0)[4:-5].strip()), section)
    return section

def make_slide(slide):
    # slide = re.sub(r"(\$\$\s*.+\s*\$\$)", lambda x: f"$$<n>{x.group(0)[2:-2]}</n>$$", slide)
    title, *sections = re.findall(r"(?<=<s>)(?:.|\s)+?(?=<\/s>)", slide)
    slides = '\n\n'.join(f"<section>{make_section(dispatch(section))}</section>" for section in sections)
    return f"{make_title(title)}\n\n{slides}"

html = make_slide(slide)
print(html)

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: