commit
6133079f86
5 changed files with 138 additions and 0 deletions
@ -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 |
@ -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; |
||||
} |
@ -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', |
||||
); |
@ -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> |
Loading…
Reference in new issue