🧠 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 :
- syntaxe courte
- aucune ambiguïté
- parsing rapide
- pas de logique complexe
- pas de notions inutiles (pas de “concepts”, pas de niveaux sémantiques)
⚙️ Règle générale
Toutes les expressions :
- commencent par
^ - se terminent par
^ - sont sur une seule ligne
- utilisent
|uniquement si paramètre (ex: couleur + texte)
✏️ 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