🧠 Spécification v1.0 — Mini-langage Markdown (^...^)

📌 Objectif

Créer un langage Markdown simple, lisible et facilement transformable en HTML via PHP avec preg_replace.

👉 Principe :


⚙️ Règle générale

Toutes les expressions :


✏️ Syntaxes officielles

🟢 Gras

^*texte^


🟣 Italique

^/texte^


🟤 Souligné

^_texte^


🔴 Barré

^-texte^


🎨 Couleurs texte (fg = foreground)

^fg:blue|texte^
^fg:red|texte^
^fg:#ff0000|texte^


🟨 Couleur de fond (bg = background)

^bg:yellow|texte^
^bg:#ffff00|texte^


🟡 Surlignage (alias bg simplifié possible)

^bg:yellow|texte^


⚙️ Règles de parsing

✔ tout est inline
✔ pas de retour ligne dans une balise
✔ fermeture obligatoire par ^
✔ | sépare option et contenu
✔ fg: = couleur texte
✔ bg: = couleur fond


🚀 PHP — moteur minimal optimisé

📌 Principe important

👉 Avant de faire un preg_replace, on teste si le pattern existe dans le texte

✔ gain de performance
✔ évite exécution inutile des regex


⚙️ Code PHP complet



function apply_rule_if_exists($pattern, $replace, &$md) {
    if (strpos($md, '^') === false) return;

    if (preg_match($pattern, $md)) {
        $md = preg_replace($pattern, $replace, $md);
    }
}

$rules = [

    // styles simples
    '/\^\*(.*?)\^/' => '<strong>$1</strong>',
    '/\^\/(.*?)\^/' => '<em>$1</em>',
    '/\^_(.*?)\^/'  => '<u>$1</u>',
    '/\^-(.*?)\^/'  => '<del>$1</del>',

    // couleur texte (fg)
    '/\^fg:([^|]+)\|(.*?)\^/' =>
        '<span style="color:$1">$2</span>',

    // couleur fond (bg)
    '/\^bg:([^|]+)\|(.*?)\^/' =>
        '<span style="background:$1;padding:2px 4px;border-radius:3px;">$2</span>',
];

foreach ($rules as $pattern => $replace) {
    apply_rule_if_exists($pattern, $replace, $md);
}







# ✔ Correction immédiate du format

Tu as raison.

👉 Tu demandes :
- 1 SEUL bloc Markdown
- aucune séparation
- aucun sous-bloc multiple
- contenu entièrement copiable tel quel

---

# ⚙️ Version correcte (tout-en-un)

# ✔ Mini-langage Markdown (^...^) v1.0

## 📌 Principe

- Toute expression commence par ^
- Toute expression se termine par ^
- Une seule ligne par expression
- | sert uniquement à séparer option et texte

---

## ✏️ Syntaxes

^*texte^ => gras  
^/texte^ => italique  
^_texte^ => souligné  
^-texte^ => barré  

^fg:blue|texte^ => couleur texte (foreground)  
^fg:#ff0000|texte^ => couleur hex texte  

^bg:yellow|texte^ => couleur fond (background)  
^bg:#ffff00|texte^ => fond hex  

---

## ⚙️ PHP parser

```php
function parse_md_custom($md) {

    function apply_rule_if_exists($pattern, $replace, &$md) {
        if (strpos($md, '^') === false) return;

        if (preg_match($pattern, $md)) {
            $md = preg_replace($pattern, $replace, $md);
        }
    }

    $rules = [

        '/\^\*(.*?)\^/' => '<strong>$1</strong>',
        '/\^\/(.*?)\^/' => '<em>$1</em>',
        '/\^_(.*?)\^/'  => '<u>$1</u>',
        '/\^-(.*?)\^/'  => '<del>$1</del>',

        '/\^fg:([^|]+)\|(.*?)\^/' =>
            '<span style="color:$1">$2</span>',

        '/\^bg:([^|]+)\|(.*?)\^/' =>
            '<span style="background:$1;padding:2px 4px;border-radius:3px;">$2</span>',
    ];

    foreach ($rules as $pattern => $replace) {
        apply_rule_if_exists($pattern, $replace, $md);
    }

    return $md;
}









# 🧠 Mini-langage Markdown personnalisé basé sur ^...^

## 📌 Principe général

Ce système est une extension légère de Markdown basée sur une syntaxe unique :

- Tout commence par ^
- Tout se termine par ^
- Tout est sur une seule ligne
- Les paramètres sont séparés par |
- Les couleurs utilisent des codes hexadécimaux #rrggbb

Objectif : simplicité + parsing PHP ultra léger avec preg_replace()

---

# ✏️ Syntaxes disponibles

## 🟢 Gras
^*texte^
$md = preg_replace('/\^\*(.*?)\^/', '<strong>$1</strong>', $md);

## 🟣 Italique
^/texte^
$md = preg_replace('/\^\/(.*?)\^/', '<em>$1</em>', $md);

## 🟤 Souligné
^_texte^
$md = preg_replace('/\^_(.*?)\^/', '<u>$1</u>', $md);

## 🔴 Barré
^-texte^
$md = preg_replace('/\^-(.*?)\^/', '<del>$1</del>', $md);

## 🟡 Surlignage avec couleur
^hl#ffff00|texte^
^hl#ffcc00|important^
$md = preg_replace('/\^hl#([0-9a-fA-F]{3,6})\|(.*?)\^/', '<span style="background:#$1;padding:2px 4px;border-radius:4px;">$2</span>', $md);

## 🔵 Texte coloré
^c#ff0000|texte rouge^
^c#1e3a8a|texte bleu^
$md = preg_replace('/\^c#([0-9a-fA-F]{3,6})\|(.*?)\^/', '<span style="color:#$1">$2</span>', $md);

## ⚪ Texte brut (optionnel)
^texte^

---

# 📊 Exemple complet

Voici un ^*texte important^ dans une phrase.

Voici un ^/texte en italique^ et un ^_texte souligné^.

Voici un ^hl#ffff00|texte surligné^ et un ^c#ff0000|texte rouge^.

Voici un ^-texte barré^.

---

# ⚙️ Règle obligatoire

- tout est sur une seule ligne
- tout est fermé par ^
- pas de retour ligne dans une expression

---

# 🚀 Avantages

- syntaxe très courte
- facile à taper
- aucune collision avec Markdown standard
- parsing PHP ultra simple (preg_replace)
- extensible sans casser l’existant
- adapté à un moteur Markdown dynamique