#*# Tentative de parser de raccourcis spip
#*# Copyright (C) 2004 Christian Lefebvre, Christian_Lefebvre@laposte.net
#*#
#*# Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou
#*# le modifier conformément aux dispositions de la Licence Publique
#*# Générale GNU, telle que publiée par la Free Software Foundation ;
#*# version 2 de la licence, ou encore (à votre choix) toute version
#*# ultérieure.
#*#
#*# Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS
#*# AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION
#*# ou D'ADAPTATION A UN OBJET PARTICULIER. Pour plus de détail, voir la
#*# Licence Publique Générale GNU.
#*#
#*# Vous devez avoir reçu un exemplaire de la Licence Publique Générale
#*# GNU en même temps que ce programme ; si ce n'est pas le cas, écrivez à
#*# la Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139,
#*# Etats-Unis.
#*#
#*# pour générer le parser, vous devez avoir installé placid sur un
#*# serveur web, ou au moins avoir ses fichiers et php en ligne de
#*# commande
#*# - depuis un web : appeler
#*# http://le.site.avec.placid/generateParser.php?fichier=spipBlocs.grammar
#*# - en ligne de commande : php generateParser.php -fichier spipBlocs.grammar
#*#
#*# le fichier spipBlocs_parser.php est alors créé, et il est
#*# utilisable depuis propreBlocs.php
NOM spipBlocs
TOKENS
MOT debTableau "\n\n|"
MOT sepLigneTableau "|\n|"
MOT finTableau "|\n\n"
MOT sepTableau "|"
REGEX ligne "\n\n*(-{4,}|_{4,})\s*"
REGEX puce "\n\n*-(\*+|#+)\s+"
REGEX br "\n\n*_\s+"
REGEX saut "\n\n*(\n|-\s+)"
MOT debInterTitre {{{
MOT finInterTitre }}}
MOT debNote [[
MOT finNote ]]
MOT debLien [
MOT sepLien ->
MOT finLien ]
MOT debQuote
MOT finQuote
MOT debCode
MOT finCode
MOT debCadre
MOT finCadre
MOT debHtml
MOT finHtml
MOT debPoesie1
MOT debPoesie2
MOT finPoesie1
MOT finPoesie2
FIN_TOKENS
AVANT_PARSE
global $courant;
FIN_AVANT_PARSE
REGLES global
ETAT _InterTitre
TOKEN finInterTitre PRECEDENT
popElement("InterTitre");
FIN_TOKEN
FIN_ETAT
ETAT _Note
TOKEN finNote PRECEDENT
popElement("Note");
FIN_TOKEN
FIN_ETAT
ETAT _Lien
TOKEN sepLien _apresLien
$courant->content=array("URL" => "");
FIN_TOKEN
TOKEN finLien PRECEDENT
// Signifie qu'on a du faire un pushText de l'url
$courant->content=array("URL" => null);
popElement("Lien");
FIN_TOKEN
FIN_ETAT
ETAT _apresLien
TOKEN finLien PRECEDENT
popElement("Lien");
FIN_TOKEN
AUTRE_TOKEN
$courant->content["URL"].=__TOKEN__;
FIN_TOKEN
FIN_ETAT
ETAT _Tableau
TOKEN sepTableau
popElement("Cellule");
$courant= &pushElement("Cellule", false);
FIN_TOKEN
TOKEN sepLigneTableau
popElement("Cellule");
popElement("Ligne");
pushElement("Ligne", false);
$courant= &pushElement("Cellule", false);
FIN_TOKEN
TOKEN finTableau PRECEDENT
popElement("Cellule");
popElement("Ligne");
popElement("Tableau");
FIN_TOKEN
FIN_ETAT
ETAT _Quote
TOKEN finQuote PRECEDENT
popElement("Quote");
FIN_TOKEN
FIN_ETAT
ETAT _Code
TOKEN finCode PRECEDENT
popElement("Code");
FIN_TOKEN
AUTRE_TOKEN
pushText(__TOKEN__);
FIN_TOKEN
FIN_ETAT
ETAT _Cadre
TOKEN finCadre PRECEDENT
popElement("Cadre");
FIN_TOKEN
AUTRE_TOKEN
pushText(__TOKEN__);
FIN_TOKEN
FIN_ETAT
ETAT _Html
TOKEN finHtml PRECEDENT
popElement("Html");
FIN_TOKEN
AUTRE_TOKEN
pushText(__TOKEN__);
FIN_TOKEN
FIN_ETAT
ETAT _Poesie
TOKEN finPoesie1 PRECEDENT
popElement("Poesie");
FIN_TOKEN
TOKEN finPoesie2 PRECEDENT
popElement("Poesie");
FIN_TOKEN
FIN_ETAT
ETAT _Puce
// comme on ne sait jamais quand se termine un item de liste,
// on ne peut que présupposer qu'il s'arrète sur un saut, une
// autre puce ou un intertitre
TOKEN saut PRECEDENT
popElement("Puce");
FIN_TOKEN
TOKEN puce PRECEDENT
popElement("Puce");
__REFAIRE__
FIN_TOKEN
TOKEN debInterTitre PRECEDENT
popElement("Puce");
__REFAIRE__
FIN_TOKEN
FIN_ETAT
ETAT *
TOKEN EOF EOF
echo "FIN\n";
__FIN__
FIN_TOKEN
TOKEN saut
$courant= &addElement("Saut", true);
$courant->content= trim(__TOKEN__);
FIN_TOKEN
TOKEN br
$courant= &addElement("Saut", true);
$courant->content= '_';
FIN_TOKEN
TOKEN puce _Puce
$puce= trim(__TOKEN__);
$niveau= strlen($puce)-1;
$type= ($puce{1}=="*")?"ul":"ol";
$courant= &pushElement("Puce", false);
$courant->content= array("type" => $type, "niveau" => $niveau);
FIN_TOKEN
TOKEN debInterTitre +_InterTitre
$courant= &pushElement("InterTitre", false);
FIN_TOKEN
TOKEN debNote +_Note
$courant= &pushElement("Note", false);
FIN_TOKEN
TOKEN debLien +_Lien
$courant= &pushElement("Lien", true);
FIN_TOKEN
TOKEN debTableau +_Tableau
$courant= &pushElement("Tableau", false);
$courant= &pushElement("Ligne", false);
$courant= &pushElement("Cellule", false);
FIN_TOKEN
TOKEN debQuote +_Quote
$courant= &pushElement("Quote", false);
FIN_TOKEN
TOKEN debCode +_Code
$courant= &pushElement("Code", false);
FIN_TOKEN
TOKEN debCadre +_Cadre
$courant= &pushElement("Cadre", false);
FIN_TOKEN
TOKEN debHtml +_Html
$courant= &pushElement("Html", false);
FIN_TOKEN
TOKEN debPoesie1 +_Poesie
$courant= &pushElement("Poesie", false);
FIN_TOKEN
TOKEN debPoesie2 +_Poesie
$courant= &pushElement("Poesie", false);
FIN_TOKEN
AUTRE_TOKEN
pushText(__TOKEN__);
FIN_TOKEN
FIN_ETAT
FIN_REGLES