Browse Source

Mise en plugin du code @maieul : Un filtre `|ajuster_intertitres` pour ajuster les intertitres dans le contenu, par exemple dans les maquettes type one-page

cf spip/spip#153
pull/2/head
jeanmarie 7 months ago
commit
6133079f86
  1. 52
      README.md
  2. 54
      ajuster_intertitres_fonctions.php
  3. 14
      lang/paquet-ajuster_intertitres_fr.php
  4. 17
      paquet.xml
  5. 1
      prive/themes/spip/images/ajuster_intertitres-xx.svg

52
README.md

@ -0,0 +1,52 @@
# Ajuster intertitres
Exemple de code en entré
```
<h2>h2</h2>
<h3>h3</h3>
```
Exemple d'appel
```
[(#TEXTE|ajuster_intertitres)]
```
et
```
[(#TEXTE|ajuster_intertitres{h5})]
```
Exemple de sortie
```
<h3>h2</h3>
<h4>h3</h4>
```
et
```
<h5>h2</h5>
<h6>h3</h6>
```
# A faire
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

54
ajuster_intertitres_fonctions.php

@ -0,0 +1,54 @@
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {return;}
/*
* Ajuster le niveau des intertitres dans un texte
* h2->h3
* h3->h4
* etc.
* @param string $texte
* @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.)
**/
function ajuster_intertitres($texte, $decalage_ou_niveau = 1) {
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;
} else {
return $texte;
}
$niveau_max_recherche = 6-$decalage; // h5+1 -> h6, mais h6+1 ->h7, 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.)
// Si on décale vers le bas (-1), alors c'est l'inverse (h2->h1, puis h3->h2. etc.)
// Ceci pour éviter de décaler quelque chose qu'on a déjà décalé.
// L'ordre de décalage est stocké dans $increment
if ($decalage > 0) {
$ancien_niveau = $niveau_max_recherche;
$increment = -1;
} elseif ($decalage == 0) {
return $texte;
} else {
$ancien_niveau = 1;
$increment = +1;
}
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);
}
$ancien_niveau = $ancien_niveau+$increment;
}
return $texte;
}

14
lang/paquet-ajuster_intertitres_fr.php

@ -0,0 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[ $GLOBALS['idx_lang'] ] = array(
// C
'paulbloas_description' => '',
'paulbloas_nom' => 'Ajuster intertitres',
'paulbloas_slogan' => 'Un filtre |ajuster_intertitres pour ajuster les intertitres dans le contenu, par exemple dans les maquettes type one-page',
);

17
paquet.xml

@ -0,0 +1,17 @@
<paquet
prefix="ajuster_intertitres"
categorie="edition"
version="0.0.1"
etat="dev"
compatibilite="[3.3.0-dev;4.0.*]"
logo="prive/themes/spip/images/ajuster_intertitres-xx.svg"
documentation="https://git.spip.net/spip-contrib-extensions/rang/src/branch/master/README.md"
>
<nom>Ajuster intertitre</nom>
<auteur>Maïeul</auteur>
<auteur>jeanmarie</auteur>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
</paquet>

1
prive/themes/spip/images/ajuster_intertitres-xx.svg

@ -0,0 +1 @@
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 256 256" xml:space="preserve"><style>.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#bf9a57}</style><path class="st0" d="M253.7 191.6c-.8 2.4-1.6 4.9-2.5 7.3-7.3 18.8-27.6 29-49.5 25-23.3-4.3-40.2-25.1-39.2-48.6.1-2.8.6-5.5 1.3-8.2 1.2-5.3-.7-9-5.3-11.4-6-3-12-5.9-18.1-8.8-44.5-21.4-88.9-42.8-133.3-64.2-1.3-.6-2.5-1.4-3.8-2C10.5 68.8 25 61.4 35.8 64c2.2.5 4.3 1.5 6.4 2.5 31.3 15.1 62.7 30.1 93.9 45.4 3.4 1.7 6.2 1.8 9.5-.1 3.5-2.1 7.4-3.5 11-5.4 6.5-3.3 8-6.4 6.5-13.5-4-19.7 4.1-37.9 21.5-48.6 17.4-10.7 38.7-10.1 53.8 1.7 7.7 6 12.4 13.8 14.3 23.3.2.9.6 1.8 1 2.6v8.8c-.3.6-.7 1.2-.8 1.8-4.5 21.6-19.2 36.1-40.9 40-5.3.9-10.7.9-16.1 1.4-7.1.6-13.7 2.7-20.1 6.7 9.9 6.8 20.9 7.4 31.8 8 19.4 1.1 37.3 14.3 43.8 32.5.8 2.3 1.5 4.5 2.3 6.8v13.7zm-42.5 12c15.1 0 24.6-11.3 20.7-24.9-3.3-11.4-17.4-20.8-29.3-19.3-8.3 1-15.2 4.4-18.2 12.7-3 8.4-.3 15.7 5.5 22 5.7 6.3 12.8 9.5 21.3 9.5zm21-124.3c.1-10.7-4.7-17.4-13-20.3-14.7-5.1-32.2 4.4-35.8 19.4-1.7 7.3.2 13.8 6.1 18.5 8.4 6.7 17.9 6.6 27.2 2.2 9.1-4.4 14.9-11.4 15.5-19.8zm-86.3 49.6c.1-4.2-3-7.6-7.1-7.8-4.1-.2-7.9 3.5-7.9 7.7 0 3.9 3.6 7.5 7.5 7.6 4.1 0 7.4-3.3 7.5-7.5z"/><path class="st0" d="M2.3 179.8c10.2-4.7 20.4-9.4 30.5-14.2 17.4-8.3 34.7-16.6 52-25 3-1.4 5.3-1.4 8.2.1 9.7 4.9 19.5 9.5 30.1 14.7-2.2 1.2-3.6 2-5.2 2.8-25 12-50.1 23.7-75 36-11.1 5.5-20.8 4.1-30.1-3.2-3.8-3-7.1-6.7-10.6-10.1.1-.4.1-.8.1-1.1zM93.8 235.3c5.3-9.6 10.3-18.8 15.7-28.6-7-1.5-13.6-2.9-21-4.6 17.9-12.5 35.1-24.5 53.1-37.2-1.1 21.6-2.2 42.7-3.3 64.9l-15.5-15.5c-5.2 9.4-10.3 18.5-15.5 28-4.6-2.3-8.9-4.6-13.5-7zM93.8 20.7c5.3 9.6 10.3 18.8 15.7 28.6-7 1.5-13.6 3-21 4.6 17.9 12.5 35.1 24.5 53.1 37.2-1.1-21.6-2.2-42.7-3.3-64.9l-15.5 15.5c-5.2-9.4-10.3-18.5-15.5-28-4.6 2.3-8.9 4.6-13.5 7z"/></svg>
Loading…
Cancel
Save