[SPIP Zone] [Spip-zone-commit] r9210 - /_plugins_/_dev_/liens_contenus/inc/lienscontenus.php

* nicolas@hoizey.com tapotait, le 25/01/2007 14:11:

Author: nicolas@hoizey.com
Date: Thu Jan 25 14:11:49 2007
New Revision: 9210

Log:
-* on ne considere plus comme modeles les appels a <code>, <quote>, <intro>, <div>, <span>... a completer

De mémoire, un modèle, c'est <[a-z]+[0-9]+> avec éventuellement des filtres
[a-z]+ avec au moins 3 lettres (pour ne pas bouffer du <h1>

--
RealET — SPIP fort et vert !

-* on ne considere plus comme modeles les appels a <code>, <quote>, <intro>, <div>, <span>... a completer

De mémoire, un modèle, c'est <[a-z]+[0-9]+> avec éventuellement des filtres
[a-z]+ avec au moins 3 lettres (pour ne pas bouffer du <h1>

Pourtant, on utilise sans problème des modèles sans identifiant, du type :

<liste_articles_branche|id_rubrique=8|dater=1|pagination=20>
<prochains|id_rubrique=49|limit=4>

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/

De mémoire, un modèle, c'est <[a-z]+[0-9]+> avec éventuellement des
filtres
[a-z]+ avec au moins 3 lettres (pour ne pas bouffer du <h1>

Pourtant, on utilise sans problème des modèles sans identifiant, du
type :

<liste_articles_branche|id_rubrique=8|dater=1|pagination=20>
<prochains|id_rubrique=49|limit=4>

En creusant un peu (un tout petit peu) inc/texte.php, on trouve ça au début de traiter_modeles() :

   if (preg_match_all('/<[a-z_-]{3,}\s*[0-9|]+/iS', $texte, $matches, PREG_SET_ORDER)) {

Donc, en fait, pour avoir affaire potentiellement à un modèle, il suffit d'avoir un chiffre OU un "|" (pipe) suite au nom de modèle.

La constante _RACCOURCI_MODELE ne fait pas mieux sur ce point :

define('_RACCOURCI_MODELE',
   '(<([a-z_-]{3,})'# <modele
  .'\s*([0-9]*)\s*' # id
  .'([|](?:<[^<>]*>|[^>])*)?' # |arguments (y compris des tags <...>)
  .'>)' # fin du modele >
  .'\s*(<\/a>)?' # eventuel </a>
        );

Est-ce que dans la théorie, le numéro était censé être obligatoire ?

En regardant la suite du code, je ne comprends du coup pas trop comment sont écartés les cas spéciaux que j'ai traité à part dans mon code (<code>, <quote>, etc.)...

Et je me rends compte au passage qu'on a un modèle article_mots.html qu'on appelle avec <article12|mots>, ce que je n'ai pas prévu... ça se complique, je vais peut-être retirer l'identification des modèles, tout simplement !

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/

Nicolas Hoizey a écrit :

De mémoire, un modèle, c'est <[a-z]+[0-9]+> avec éventuellement des
filtres
[a-z]+ avec au moins 3 lettres (pour ne pas bouffer du <h1>
      

Pourtant, on utilise sans problème des modèles sans identifiant, du
type :

<liste_articles_branche|id_rubrique=8|dater=1|pagination=20>
<prochains|id_rubrique=49|limit=4>
    
En creusant un peu (un tout petit peu) inc/texte.php, on trouve ça au début de traiter_modeles() :

   if (preg_match_all('/<[a-z_-]{3,}\s*[0-9|]+/iS', $texte, $matches, PREG_SET_ORDER)) {

Donc, en fait, pour avoir affaire potentiellement à un modèle, il suffit d'avoir un chiffre OU un "|" (pipe) suite au nom de modèle.

La constante _RACCOURCI_MODELE ne fait pas mieux sur ce point :

define('_RACCOURCI_MODELE',
   '(<([a-z_-]{3,})'# <modele
  .'\s*([0-9]*)\s*' # id
  .'([|](?:<[^<>]*>|[^>])*)?' # |arguments (y compris des tags <...>)
  .'>)' # fin du modele >
  .'\s*(<\/a>)?' # eventuel </a>
        );

Est-ce que dans la théorie, le numéro était censé être obligatoire ?
  

non pas du tout, c'est bien ce que tu as compris

<fromage|nom=camembert|origine=normandie>
appele le modele fromage avec les parametres nom et origine passes en #ENV
y a une page de doc sur spip.net qui explique tout le principe

En regardant la suite du code, je ne comprends du coup pas trop comment sont écartés les cas spéciaux que j'ai traité à part dans mon code (<code>, <quote>, etc.)...

Et je me rends compte au passage qu'on a un modèle article_mots.html qu'on appelle avec <article12|mots>, ce que je n'ai pas prévu... ça se complique, je vais peut-être retirer l'identification des modèles, tout simplement !

-Nicolas

la réponse est en effet là …

On notera que, pour éviter toute collision avec les balises HTML, un modèle ne peut pas être appelé par un raccourci comme <modele> , qui ne contient ni chiffre ni le symbole |.

donc il faut au moins un chiffre ou un pipe pour avoir un modele.

A+
Arnaud

Le 25/01/07, Cedric <cedric.morin@yterium.com> a écrit :

Nicolas Hoizey a écrit :

Est-ce que dans la théorie, le numéro était censé être obligatoire ?

non pas du tout, c’est bien ce que tu as compris

<fromage|nom=camembert|origine=normandie>
appele le modele fromage avec les parametres nom et origine passes en #ENV
y a une page de doc sur spip.net qui explique tout le principe

En regardant la suite du code, je ne comprends du coup pas trop
comment sont écartés les cas spéciaux que j’ai traité à part dans mon
code (, , etc.)…


spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone


Arnaud

la réponse est en effet là ..
On notera que, pour éviter toute collision avec les balises HTML, un modèle ne peut pas être appelé par un raccourci comme <modele> , qui ne contient ni chiffre ni le symbole |.
donc il faut au moins un chiffre ou un pipe pour avoir un modele.

Principe adopté, donc !

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/

Juste pour ma culture …il me semble que tu ne vérifies pas la condition qui est au moins 1 chiffre ou 1 | non directment dans la regex ?
sur inc_texte :
<[a-z_-]{3,}\s*[0-9|]+/iS

sur liens_contenus
<([a-z_-]{3,})\s*([0-9]+)?(|[^>]*)?

Dans inc_texte le ni chiffre ni pipe est exclus par le [0-9|]+
alors que toi tu testes la présence de l’un ou de l’autre.

En fait en regardant plus bas tu le gères en testant la valeur des « parenthèses ».

C’est donc équivalent même si ça oblige à réfléchir plus en lisant ;)- (à la lecture du code c’est pour simplifier le travail de découpage non ?)
A+

Arnaud

Le 26/01/07, Nicolas Hoizey <nicolas@hoizey.com> a écrit :

la réponse est en effet là …
On notera que, pour éviter toute collision avec les balises HTML,
un modèle ne peut pas être appelé par un raccourci comme ,
qui ne contient ni chiffre ni le symbole |.
donc il faut au moins un chiffre ou un pipe pour avoir un modele.

Principe adopté, donc !

-Nicolas


Nicolas « Brush » HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/


Arnaud

Juste pour ma culture ...il me semble que tu ne vérifies pas la condition qui est au moins 1 chiffre ou 1 | non directment dans la regex ?
sur inc_texte :
<[a-z_-]{3,}\s*[0-9|]+/iS

sur liens_contenus
<([a-z_-]{3,})\s*([0-9]+)?(|[^>]*)?

Effectivement, je suis reparti d'une autre regex, qui permet en une seule fois d'obtenir aussi le découpage.

Dans inc_texte le ni chiffre ni pipe est exclus par le [0-9|]+
alors que toi tu testes la présence de l'un ou de l'autre.
En fait en regardant plus bas tu le gères en testant la valeur des "parenthèses".

Voilà.

C'est donc équivalent même si ça oblige à réfléchir plus en lisant ;)- (à la lecture du code c'est pour simplifier le travail de découpage non ?)

Oui, comme indiqué ci-avant, c'est pour avoir tout de suite les différents éléments découpés.

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/

Franchement, le core applique une regexp, toute tentative de faire quelque chose là dessus doit s'appuyer sur la même regexp.
--
toggg qui sait même pas de quoi vous causez.

Ventre Arnaud wrote:

Juste pour ma culture ...il me semble que tu ne vérifies pas la condition
qui est au moins 1 chiffre ou 1 | non directment dans la regex ?
sur inc_texte :
<[a-z_-]{3,}\s*[0-9|]+/iS

sur liens_contenus
<([a-z_-]{3,})\s*([0-9]+)?(|[^>]*)?

Dans inc_texte le ni chiffre ni pipe est exclus par le [0-9|]+
alors que toi tu testes la présence de l'un ou de l'autre.

En fait en regardant plus bas tu le gères en testant la valeur des
"parenthèses".

C'est donc équivalent même si ça oblige à réfléchir plus en lisant ;)- (à la
lecture du code c'est pour simplifier le travail de découpage non ?)
A+

Arnaud

Le 26/01/07, Nicolas Hoizey <nicolas@hoizey.com> a écrit :

> la réponse est en effet là ..
> On notera que, pour éviter toute collision avec les balises HTML,
> un modèle ne peut pas être appelé par un raccourci comme <modele> ,
> qui ne contient ni chiffre ni le symbole |.
> donc il faut au moins un chiffre ou un pipe pour avoir un modele.

Principe adopté, donc !

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/

------------------------------------------------------------------------

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone
  

Franchement, le core applique une regexp, toute tentative de faire quelque chose là dessus doit s'appuyer sur la même regexp.

Dans l'absolu, je suis plutôt d'accord, même si cela m'oblige de toute façon à réutiliser en plus la regexp que j'utilise pour l'instant... je vais voir comment m'aligner.

Ventre Arnaud wrote:

Juste pour ma culture ...il me semble que tu ne vérifies pas la condition
qui est au moins 1 chiffre ou 1 | non directment dans la regex ?
sur inc_texte :
<[a-z_-]{3,}\s*[0-9|]+/iS

sur liens_contenus
<([a-z_-]{3,})\s*([0-9]+)?(|[^>]*)?

Dans inc_texte le ni chiffre ni pipe est exclus par le [0-9|]+
alors que toi tu testes la présence de l'un ou de l'autre.

En fait en regardant plus bas tu le gères en testant la valeur des
"parenthèses".

C'est donc équivalent même si ça oblige à réfléchir plus en lisant ;)- (à la
lecture du code c'est pour simplifier le travail de découpage non ?)
A+

Arnaud

Le 26/01/07, Nicolas Hoizey <nicolas@hoizey.com> a écrit :

> la réponse est en effet là ..
> On notera que, pour éviter toute collision avec les balises HTML,
> un modèle ne peut pas être appelé par un raccourci comme <modele> ,
> qui ne contient ni chiffre ni le symbole |.
> donc il faut au moins un chiffre ou un pipe pour avoir un modele.

Principe adopté, donc !

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/

------------------------------------------------------------------------

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/

J'ai plus l'habitude des ereg que des preg, donc désolé si mes questions sont bêtes...

Franchement, le core applique une regexp, toute tentative de faire
quelque chose là dessus doit s'appuyer sur la même regexp.

Dans l'absolu, je suis plutôt d'accord, même si cela m'oblige de
toute façon à réutiliser en plus la regexp que j'utilise pour
l'instant... je vais voir comment m'aligner.

La définition de la regexp dans inc/texte est la suivante :

define('_RACCOURCI_MODELE',
   '(<([a-z_-]{3,})'# <modele
  .'\s*([0-9]*)\s*' # id
  .'([|](?:<[^<>]*>|[^>])*)?' # |arguments (y compris des tags <...>)
  .'>)' # fin du modele >
  .'\s*(<\/a>)?' # eventuel </a>
        );

La partie concernant les arguments ('([|](?:<[^<>]*>|[^>])*)?') semble indiquer qu'on ne cherche qu'un argument au plus (? plutôt que * à la fin).
Est-ce bien le cas ?

Si oui, comment est traité le cas <modele12|argument1|argument2|...> ?

Sinon, autre question, pourquoi le '|' est-il entre crochets alors qu'il est seul ?

Merci.

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002
phpHeaven : http://www.phpheaven.net/