Carnet Wiki

Erreurs du parseur SPIP

Version 14 — Décembre 2014 JLuc

) Eléments de grammaire 1) Erreurs du lexer ou du parser SPIP 2 ou 3 2) Erreurs non détectées, non signalées d’erreur

0) Eléments de grammaire

cf http://programmer.spip.net/Syntaxe-complete-des-balises

À l’intérieur d’une paire de { et }, il n’est pas nécessaire de poser des [( et )]

  • dans les critères de boucle :
    <BOUCLE_a(TABLE) {champ op #TRUC|filtre{param}}>
  • dans les balise de langue :
    <:module:clef{arg1=txt, arg2=#BALISE}|filtre1{txt,#BALISE}|filtre2:>

Cependant, dans le cas de #SET ou #ARRAY il est nécessaire de poser les [( et )] à la balise elle-même si elle n’est pas utilisée comme argument d’une autre balise :

[(#SET{var, #BALISE|filtre{arg}})]
   [(#ARRAY{1,a, 2,b, 3,#BALISE|filtre})]

Ainsi, pour le #GET, suivant où il est utilisé, il faudra ou non poser les [( et )] :

[(#GET{truc}|filtre)]
   <BOUCLE_a(TABLE) {champ op #GET{truc}|filtre{param}}>

1) Erreurs SPIP2.1 et SPIP3)

  • JLuc : les codes suivants provoquent une erreur du compilateur :
    #SET{tel,[(#TEL|oui) telephone #TEL]}
    #SET{mel,[(#WEB|non) [(#EMAIL|oui) mel #EMAIL]]}
    	

    Le résultat n’est pas bon.
    }
    </
    code >
    L’erreur affichée est « Argument manquant dans la balise SET ».
    Par contre ça passe avec des crochets autour du SET.

    [(#SET{tel,[(#TEL|oui) telephone #TEL]})] } 
    # SET{web,&#91;(#WEB|oui )  web  # WEB] 

    C’est « normal ».


2) Erreurs constatées dans SPIP3

Habon :

<blockquote class="spip">

#ID_ANNONCE n’est pas interprété :

#URL_ACTION_AUTEUR{
                ajouter_lien,
              annonce-#ID_ANNONCE-auteur-#SESSION{id_auteur}-candidater,
                #SELF}

#ID_ANNONCE est interprété :

#URL_ACTION_AUTEUR{
               ajouter_lien,
               auteur-#SESSION{id_auteur}-annonce-#ID_ANNONCE-candidater,
               #SELF},
               '

Si le #SESSION{id_auteur} est un #NOM,#ID_ANNONCE est bien interprété. On dirait donc que c’est les arguments des balises :
-  2 balises avec des arguments, c’est bon.
-  2 balises sans arguments, c’est bon.
-  Mais une balise avec et une balise sans, c’est pas bon.

Astuce trouvée : remplacer mon #ID_ANNONCE par un #ENV{id_annonce}, mais ça marche pas avec tous les contextes.

</blockquote>

Rq sur ce dernier signalement : C’est une difficulté pour le créateur de squelette SPIP, mais cette difficulté ne peut elles pas être normalement contournées en utilisant la syntaxe complète des balises, à savoir avec les crochets + parenthèses ?
Normalement, c’est possible. Mais permettre l’écriture sans crochets parenthèses faciliterait l’écriture.


Erreurs de syntaxes non signalées

Les erreurs suivantes ne sont pas détectées ni signalées.
C’est probablement difficile à changer car tout ce qui n’est pas compris comme code SPIP est compris comme texte. Faudrait il que SPIP détecte « ce qui ressemble presque à un code mais n’en est pas un » pour le signaler et inviter à vérifier si c’est ya en fait une erreur dans ce qui devrait être un code ?

  • JLuc : Dans <INCLURE{fond=sla/main_head_fin.sla}}/> aucune erreur n’est signalée mais ça comprend pas ce qu’il faut (il y a un } en trop à la fin).
    Indice : SPIP pourrait signaler l’erreur vu qu’il y a <INCLURE au début
  • JLuc : [avant (#VAL{arg}|unfiltre|#NOM_SITE_SPIP) après]] aucune erreur signalée mais il manque un |sinon. SPIP pourrait éventuellement détecter que le résultat est ignoré et remplacé par une constante et présumer qu’il y a une erreur ?
  • JLuc :[(#BALISE|filtre{texte1,texte2})] pose problème si il y a des virgules dans texte1 ou texte2 : cette virgule est considérée comme séparatrice des arguments du filtre. Même si on entoure les arguments avec #VAL{...}, le problème persiste.