Browse Source

Fix #1, échapper certaines choses.

- Le code n'est jamais transformé (y compris avec `pre&code` ou `coloration_code`)
- Par défaut, ce qui est entre `<blockquote>` est protégé des transformation.
- On peut passer un second argument au filtre indiquant sous forme de `#LISTE` les balises à échapper. Exemple d'usage :
```
[(#TEXTE|ajuster_intertitres{h5,#LISTE{blockquote|article|aside|nav|section}})]
``
master
Maïeul 1 year ago
parent
commit
ffef42eee3
  1. 31
      README.md
  2. 12
      ajuster_intertitres_fonctions.php

31
README.md

@ -2,7 +2,7 @@
Voir la discussion : https://git.spip.net/spip/spip/pulls/153
Exemple de code en entré
## Exemple de code en entrée
```
@ -10,45 +10,38 @@ Exemple de code en entré
<h3>h3</h3>
```
Exemple d'appel
## Exemple d'appel
```
[(#TEXTE|ajuster_intertitres)]
```
et
et
```
[(#TEXTE|ajuster_intertitres{h5})]
```
Exemple de sortie
## Exemple de sortie
```
<h3>h2</h3>
<h4>h3</h4>
```
et
et
```
<h5>h2</h5>
<h6>h3</h6>
```
# A faire
## Note sur les échappements
Comme le fait remarquer @marcimat, il faut améliorer encore
- ne pas ajuster ce qu'il y a entre code, pre, cadre, etc dans $texte
- éventuellement (en option) ne pas ajuster ce qu'il entre aside, nav etc.
# Ps de Maieul
Une autre solution aurait été d'avoir quelques chose à appeler au moment où l'on veut faire le decalage, et qui ajuste en amont les globales de niveau de titre.
Je n'ai pas pris ce parti pour les raisons suivantes :
- ce seraiot le seul cas où dans un squelette on peut ajuster des globales
- cela crééerait une syntaxe inhabituelle, par rapport à un filtre
- ca demande un niveau de connaissance de l'ordre d'interprétation que je n'ai pas
- Le code n'est jamais transformé (y compris avec `pre&code` ou `coloration_code`)
- Par défaut, ce qui est entre `<blockquote>` est protégé des transformation.
- On peut passer un second argument au filtre indiquant sous forme de `#LISTE` les balises à échapper. Exemple d'usage :
```
[(#TEXTE|ajuster_intertitres{h5,#LISTE{blockquote|article|aside|nav|section}})]
``

12
ajuster_intertitres_fonctions.php

@ -12,13 +12,13 @@ if (!defined('_ECRIRE_INC_VERSION')) {return;}
* @param str|int=1 $decalage_ou_niveau :
* - si int : 1 pour augmenter d'un niveau, -1 pour baisser d'un niveau
* - si str de la forme `hx`, alors fait commencer les titres à hx, et descend ensuite (`hx+1`, `hx+2` etc.)
* @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) {
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))) {
var_dump($niveau);
preg_match_all('#<h([1-6])#', $texte, $matches);
$base_actuel = min($matches[1]);
$decalage = $niveau - $base_actuel;
@ -26,6 +26,11 @@ function ajuster_intertitres($texte, $decalage_ou_niveau = 1) {
return $texte;
}
// On echape
if ($echappe) {
$preg = ',<('.$echappe.')(\s[^>]*)?>(.*)</\1>,UimsS';
$texte = echappe_html($texte, '', true, $preg);
}
$niveau_max_recherche = 6-$decalage; // h5+1 -> h6, mais h6+1 -> h6, car h7 n'existe pas
// Si on décale vers le haut (+1), alors on commence par décaler les titres avec le plus grand chiffre, puis ceux avec le chiffres le plus bas (h5->h6, puis h4->h5, etc.)
@ -50,5 +55,8 @@ function ajuster_intertitres($texte, $decalage_ou_niveau = 1) {
}
$ancien_niveau = $ancien_niveau+$increment;
}
if ($echappe) {
$texte = echappe_retour($texte);
}
return $texte;
}

Loading…
Cancel
Save