[spip-dev] <p> </p> et compagnie ...

un petit cas tordu que je soumets a votre sagacité (non testé en SVN, mais sur 182e avec une fonction de fermeture paragraphe qui ressemble (en moins bien evidemment …) )
Cas d’ecole dans l’article : [<imgxxx|center>->www.service-public.fr]
l’algo touve un div devant l’image, et referme le

, mais le validateur n’aime pas ca du tout :
<code>
<a href="http://www.service-public.fr" class="spip_out">
</p><div class='spip_documents spip_documents_center' ><img src='IMG/jpg/Avon.jpg'
width='150'
height='33'
style='border-width: 0px;' alt="Service-Public.fr (JPG)" title="Service-Public.fr" /></div>

<p class="spip"></a>

"One possible cause for this message is that you have attempted to put a block-level element (such as « 

 » or «  ») inside an inline element (such as «  », «  », or «  »). "

Le probleme c’est qu’on peut filtrer le <a…>

avec une regex :

$str = preg_replace(’{(<a\s[^>]>)\s(</p>)(.?)(<p\s[^>]>)\s*()}is’,’\2\1\3\5\4’,$str);

mais il reste le <a…><div…> et son reciproque qui tilte encore
et la que faire, vu que le <div…><img…>… fait un bloc complet ?

Salutations,
CM

Salut,

cedric.morin@yterium.com a écrit :

mais il reste le <a...><div..> et son reciproque qui tilte encore
et la que faire, vu que le <div..><img..>.. fait un bloc complet ?

Oui, c'est un vrai problème car les traitements pour l'image et le lien ne se font pas en meme temps.

Mais en fait il faudrait peut etre carrement virer le div et mettre directos un <a> avec display:block; dans le css.

Donc de créer une css

a.image{
display:block;
}

et eventuellement

span.image{

}

pour les trucs à l'intérieur du <a> block

BoOz

BoOz a écrit :

Salut,

cedric.morin@yterium.com a écrit :

mais il reste le <a...><div..> et son reciproque qui tilte encore
et la que faire, vu que le <div..><img..>.. fait un bloc complet ?

Oui, c'est un vrai problème car les traitements pour l'image et le lien ne se font pas en meme temps.

Et idéalement devraient être squeletisable (avec un squelette par défaut faisant ce que ça fait actuellement) et donc la possibilité de mettre ce que l'on veut (par exemple, une liste de définition de type dd, dl, dt)

Jacques PYRAT a écrit :

BoOz a écrit :

Salut,

cedric.morin@yterium.com a écrit :

mais il reste le <a...><div..> et son reciproque qui tilte encore
et la que faire, vu que le <div..><img..>.. fait un bloc complet ?
     

Oui, c'est un vrai problème car les traitements pour l'image et le lien ne se font pas en meme temps.
   

Et idéalement devraient être squeletisable (avec un squelette par défaut faisant ce que ça fait actuellement) et donc la possibilité de mettre ce que l'on veut (par exemple, une liste de définition de type dd, dl, dt)

faudrait regarder du coté de spip-carto parcque c est ce que fait leur raccourci <mapxx> il appelle un squelette par defaut surchargeable si on passe un parametre <mapxx|svg> appelle le squelette svg

Aurélien

aurelien levy a écrit :

faudrait regarder du coté de spip-carto parcque c est ce que fait leur raccourci <mapxx> il appelle un squelette par defaut surchargeable si on passe un parametre <mapxx|svg> appelle le squelette svg

En gros, ca donnerait un truc du genre (dans apres_propre par exemple) :

if (is_int(strpos($texte, '<img')) &&
      (preg_match_all(",<img(\d+)([|])?([a-zA-Z.]+)?([(])?([a-zA-Z0-9\,\-.]+)?([)])?>,", $texte, $regs, PREG_SET_ORDER))) {
       foreach ($regs as $r) {
            $cherche = $r[1];
            $lecontexte['id']=$id;

            //Ca c'est pour passer des arguments supplementaires
            $lecontexte['args']=$r[5];

            //voir pour le delai ... il pourrait etre à 0 ou 1 car à priori, on veut recalculer au recalcul de la page
            $ledelai="60";
                        //pour pouvoir choisir le squelette
            if ($r[3]) $lecontexte['fond']="img_".$r[3];
            else $lecontexte['fond']="img";
                        //En attendant l'API magique ....
            $lechemin=generer_nom_fichier_cache($lecontexte, $lecontexte['fond']);
            $usecache=determiner_cache($ledelai, $usecache, $lechemin);
            $tab=obtenir_page ($lecontexte,$lechemin , $ledelai, $usecache, $lecontexte['fond']);
                       $remplace=$tab['texte'];
            $texte = str_replace($cherche, $remplace, $texte);
    }
}

la, tu as un squelette img.html par defaut et la possibilité d'utiliser img_xxx.html en faisant <img12|xxx>
tu peux aussi passer des arguments comme la taille ou autre : <img12|xxx(125,200)>

Mais bon, je ne suis pas sur que ca soit très interessant de mettre en place ce systeme.
Pour la 1.9, SpipCarto devrait etre une simple contrib, sans modif de spip, donc rien n'empechera de l'utiliser directement (tu peux faire un squelette de carte qui ne renvoie que l'image)
Et surtout, l'appel du cache utilise des fonctions qui risquent de changer, à la limite l'API des formulaires (inclure_balise_dynamique) est plus stable et gagnerait sans doute à etre utilisée.
A voir ...

@++

En gros, ca donnerait un truc du genre (dans apres_propre par exemple) :

if (is_int(strpos($texte, '<img')) &&
     (preg_match_all(",<img(\d+)([|])?([a-zA-Z.]+)?([(])?([a-zA-Z0-9\,\-.]+)?([)])?>,", $texte, $regs, PREG_SET_ORDER))) {
     foreach ($regs as $r) {
           $cherche = $r[1];
           $lecontexte['id']=$id;

           //Ca c'est pour passer des arguments supplementaires
           $lecontexte['args']=$r[5];

           //voir pour le delai ... il pourrait etre à 0 ou 1 car à priori, on veut recalculer au recalcul de la page
           $ledelai="60";
                      //pour pouvoir choisir le squelette
           if ($r[3]) $lecontexte['fond']="img_".$r[3];
           else $lecontexte['fond']="img";
                      //En attendant l'API magique ....
           $lechemin=generer_nom_fichier_cache($lecontexte, $lecontexte['fond']);
           $usecache=determiner_cache($ledelai, $usecache, $lechemin);
           $tab=obtenir_page ($lecontexte,$lechemin , $ledelai, $usecache, $lecontexte['fond']);
                     $remplace=$tab['texte'];
           $texte = str_replace($cherche, $remplace, $texte);
   }
}

la, tu as un squelette img.html par defaut et la possibilité d'utiliser img_xxx.html en faisant <img12|xxx>
tu peux aussi passer des arguments comme la taille ou autre : <img12|xxx(125,200)>

Mais bon, je ne suis pas sur que ca soit très interessant de mettre en place ce systeme.
Pour la 1.9, SpipCarto devrait etre une simple contrib, sans modif de spip, donc rien n'empechera de l'utiliser directement (tu peux faire un squelette de carte qui ne renvoie que l'image)
Et surtout, l'appel du cache utilise des fonctions qui risquent de changer, à la limite l'API des formulaires (inclure_balise_dynamique) est plus stable et gagnerait sans doute à etre utilisée.
A voir ...

@++
   

euh ca va pas rentré en conflit avec la possibilité deja presente de passer une class spécifique aux raccourci img <img12|toto> applique la class toto sur l'image à l'heure actuelle

euh ca va pas rentré en conflit avec la possibilité deja presente de passer une class spécifique aux raccourci img <img12|toto> applique la class toto sur l'image à l'heure actuelle

oui, j'etais en train de me faire la meme remarque.
En fait, c'est mieux de faire ca en avant_propre, en ne traitant que les cas voulus (peut etre une autre syntaxe du genre <img_toto_12>).
Et bien sur passer le resultat en echappement html.

Mais quitte à "squelettiser" ce tag, autant mettre en place une solution générique qui traite ce qu'on veut, bref, autant utiliser SpipCarto ... qui effectivement est une machine à remplacer un tag contenant un id, un nom de squelette et des parametres par une inclusion de ce squelette.
Tu peux deja l'utiliser pour aller chercher le contenu d'une breve, d'un article,d'un mot ... ca appelle un squelette avec un contexte donné, c'est tout, tu peux faire ce que tu veux dedans et tu as les #ENV pour jouer avec les parametre et l'id.

Je me disais d'ailleurs que ca aurait pu prendre une syntaxe plus generique du genre <inclure|nomdusquelette(parametres)> (l'id devenant un parametre parmis d'autres, en premier par convention)
ou quelque chose de plus XML : <inclure fond="nomdusquelette" id="XX" nomparam="valeur" ... />

des avis ?

@++