Browse Source

D'après @Jluc :

- s'assurer que `$decalage` soit systématiquement un entier ;
 - lorsqu'on échappe les balises, utiliser un word-boudary
 - lorsqu'on recherche les titres, utiliser un word-boundary
 - lorsqu'on remplace les titres, utiliser un regepx pour remplacer
 `<h2>` mais pas `<h2a>` (même si cette balise n'a aucune sens).

D'après @Jluc : être un peu plus stricte sur les regepx
Maïeul 2 years ago
parent
commit
11a0a6f3c3
  1. 25
      ajuster_intertitres_fonctions.php

25
ajuster_intertitres_fonctions.php

@ -15,23 +15,23 @@ if (!defined('_ECRIRE_INC_VERSION')) {return;}
* @param string ('blockquote') $echappe, ne pas appliquer le traitement au sein de certaines balises HTML. Exemple `blockquote|article|aside|nav|section`
**/
function ajuster_intertitres($texte, $decalage_ou_niveau = 1, $echappe = 'blockquote') {
if (intval($decalage_ou_niveau)) {
$decalage = $decalage_ou_niveau;
} elseif (substr($decalage_ou_niveau, 0, 1) === 'h' and $niveau = intval(substr($decalage_ou_niveau, 1, 1))) {
preg_match_all('#<h([1-6])#', $texte, $matches);
if (!$matches[1]) {
$decalage = intval($decalage_ou_niveau);
if (!$decalage) {
if (substr($decalage_ou_niveau, 0, 1) === 'h' and $niveau = intval(substr($decalage_ou_niveau, 1, 1))) {
preg_match_all('#<h([1-6])\b#', $texte, $matches);
if (!$matches[1]) {
return $texte;
}
$base_actuel = min($matches[1]);
$decalage = $niveau - $base_actuel;
} else {
return $texte;
}
$base_actuel = min($matches[1]);
$decalage = $niveau - $base_actuel;
} else {
return $texte;
}
// On echape
if ($echappe) {
$preg = ',<('.$echappe.')(\s[^>]*)?>(.*)</\1>,UimsS';
$preg = ',<('.$echappe.')\b([^>]*)?>(.*)</\1>,UimsS';
$texte = echappe_html($texte, '', true, $preg);
}
@ -53,8 +53,7 @@ function ajuster_intertitres($texte, $decalage_ou_niveau = 1, $echappe = 'blockq
while ($ancien_niveau > 0 and $ancien_niveau <= $niveau_max_recherche){
$nouveau_niveau = $ancien_niveau+$decalage;
if ($nouveau_niveau > 0) {
$texte = str_replace("<h$ancien_niveau", "<h$nouveau_niveau", $texte);
$texte = str_replace("</h$ancien_niveau", "</h$nouveau_niveau", $texte);
$texte = preg_replace('/<(\/?)h'.$ancien_niveau.'\b/', '<$1h'.$nouveau_niveau, $texte);
}
$ancien_niveau = $ancien_niveau+$increment;
}

Loading…
Cancel
Save