#*# 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