| 178 | jpm | 1 | <?php
 | 
        
           |  |  | 2 | /*vim: set expandtab tabstop=4 shiftwidth=4: */
 | 
        
           |  |  | 3 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 4 | // | PHP version 4.3                                                                                      |
 | 
        
           |  |  | 5 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 6 | // | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
 | 
        
           |  |  | 7 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 8 | // | This file is part of Papyrus.                                                                        |
 | 
        
           |  |  | 9 | // |                                                                                                      |
 | 
        
           |  |  | 10 | // | Foobar is free software; you can redistribute it and/or modify                                       |
 | 
        
           |  |  | 11 | // | it under the terms of the GNU General Public License as published by                                 |
 | 
        
           |  |  | 12 | // | the Free Software Foundation; either version 2 of the License, or                                    |
 | 
        
           |  |  | 13 | // | (at your option) any later version.                                                                  |
 | 
        
           |  |  | 14 | // |                                                                                                      |
 | 
        
           |  |  | 15 | // | Foobar is distributed in the hope that it will be useful,                                            |
 | 
        
           |  |  | 16 | // | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
 | 
        
           |  |  | 17 | // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
 | 
        
           |  |  | 18 | // | GNU General Public License for more details.                                                         |
 | 
        
           |  |  | 19 | // |                                                                                                      |
 | 
        
           |  |  | 20 | // | You should have received a copy of the GNU General Public License                                    |
 | 
        
           |  |  | 21 | // | along with Foobar; if not, write to the Free Software                                                |
 | 
        
           |  |  | 22 | // | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
 | 
        
           |  |  | 23 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           | 345 | jpm | 24 | // CVS : $Id: Papyrus.class.php,v 1.6 2005-04-18 16:41:53 jpm Exp $
 | 
        
           | 178 | jpm | 25 | /**
 | 
        
           |  |  | 26 | * Classe configurant le formatage pour Papyrus.
 | 
        
           |  |  | 27 | *
 | 
        
           |  |  | 28 | * Ce fichier contient une classe configurant les règles de formatage de Papyrus.
 | 
        
           |  |  | 29 | * Nécessite que l'application appelant ce fichier est précédement inclu le fichier de Pear:
 | 
        
           |  |  | 30 | * 'Text/Wiki.php';
 | 
        
           |  |  | 31 | *
 | 
        
           |  |  | 32 | *@package Text_Wiki
 | 
        
           |  |  | 33 | *@subpackage Papyrus
 | 
        
           |  |  | 34 | //Auteur original :
 | 
        
           |  |  | 35 | *@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
 | 
        
           |  |  | 36 | //Autres auteurs :
 | 
        
           |  |  | 37 | *@author        Aucun
 | 
        
           |  |  | 38 | *@copyright     Tela-Botanica 2000-2004
 | 
        
           | 345 | jpm | 39 | *@version       $Revision: 1.6 $ $Date: 2005-04-18 16:41:53 $
 | 
        
           | 178 | jpm | 40 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 41 | */
 | 
        
           |  |  | 42 |   | 
        
           |  |  | 43 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 44 | // |                                            ENTETE du PROGRAMME                                       |
 | 
        
           |  |  | 45 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 46 |   | 
        
           |  |  | 47 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 48 | // |                                            CORPS du PROGRAMME                                        |
 | 
        
           |  |  | 49 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 50 | /**
 | 
        
           |  |  | 51 | *
 | 
        
           |  |  | 52 | * Parse structured wiki text and render into arbitrary formats such as XHTML.
 | 
        
           |  |  | 53 | *
 | 
        
           |  |  | 54 | * Cette classe fille permet de configurer les régles de formatage pour Papyrus.
 | 
        
           |  |  | 55 | * Généralement nous avons à faire à des actions.
 | 
        
           |  |  | 56 | *
 | 
        
           |  |  | 57 | * @author Paul M. Jones <pmjones@ciaweb.net>
 | 
        
           |  |  | 58 | * @package Text_Wiki
 | 
        
           |  |  | 59 | * @version 0.23.1
 | 
        
           |  |  | 60 | * @license LGPL
 | 
        
           |  |  | 61 | */
 | 
        
           |  |  | 62 | class Text_Papyrus extends Text_Wiki {
 | 
        
           |  |  | 63 |   | 
        
           |  |  | 64 |     /**
 | 
        
           |  |  | 65 |     *
 | 
        
           |  |  | 66 |     * Liste de règles par défaut du format Papyrs dans leur ordre d'application au texte
 | 
        
           |  |  | 67 |     * à transformer.
 | 
        
           |  |  | 68 |     *
 | 
        
           |  |  | 69 |     * @access public
 | 
        
           |  |  | 70 |     *
 | 
        
           |  |  | 71 |     * @var array
 | 
        
           |  |  | 72 |     *
 | 
        
           |  |  | 73 |     */
 | 
        
           |  |  | 74 |     var $rules = array(
 | 
        
           | 335 | jpm | 75 |         'Inclure', // Action Inclure
 | 
        
           |  |  | 76 |         'Motcles', // Action Motcles
 | 
        
           |  |  | 77 |         'Categorie', // Action Categorie
 | 
        
           | 345 | jpm | 78 |         'Nouveaute', // Action Nouveaute
 | 
        
           |  |  | 79 |         'Plan', // Action Plan
 | 
        
           |  |  | 80 |         'Syndication', // Action Syndication
 | 
        
           | 178 | jpm | 81 |     );
 | 
        
           |  |  | 82 |   | 
        
           |  |  | 83 |     /**
 | 
        
           |  |  | 84 |     *
 | 
        
           |  |  | 85 |     * The list of rules to not-apply to the source text.
 | 
        
           |  |  | 86 |     *
 | 
        
           |  |  | 87 |     * @access public
 | 
        
           |  |  | 88 |     *
 | 
        
           |  |  | 89 |     * @var array
 | 
        
           |  |  | 90 |     *
 | 
        
           |  |  | 91 |     */
 | 
        
           | 179 | jpm | 92 |     var $disable = array();
 | 
        
           | 178 | jpm | 93 |   | 
        
           |  |  | 94 |     /**
 | 
        
           |  |  | 95 |     *
 | 
        
           |  |  | 96 |     * The delimiter for token numbers of parsed elements in source text.
 | 
        
           |  |  | 97 |     *
 | 
        
           |  |  | 98 |     * @access public
 | 
        
           |  |  | 99 |     *
 | 
        
           |  |  | 100 |     * @var string
 | 
        
           |  |  | 101 |     *
 | 
        
           |  |  | 102 |     */
 | 
        
           |  |  | 103 |     var $delim = 12;
 | 
        
           |  |  | 104 |   | 
        
           | 247 | jpm | 105 |     function Text_Papyrus($rules = null)
 | 
        
           | 178 | jpm | 106 |     {
 | 
        
           | 247 | jpm | 107 |         //Text_Wiki::Text_Wiki();
 | 
        
           |  |  | 108 |         if (is_array($rules)) {
 | 
        
           |  |  | 109 |             $this->rules = $rules;
 | 
        
           |  |  | 110 |         }
 | 
        
           |  |  | 111 |         // Nous devons sortir les fichiers de Text_Wiki du dépot Pear car la fonction file_exists de PHP utilisée dans
 | 
        
           |  |  | 112 |         // la méthode findfile de Text_Wiki renvoie false.
 | 
        
           |  |  | 113 |         $this->addPath('parse', $this->fixPath(dirname(__FILE__)) .'../../pear/Text/Wiki/Parse/');
 | 
        
           |  |  | 114 |         $this->addPath('render', $this->fixPath(dirname(__FILE__)) .'../../pear/Text/Wiki/Render/');
 | 
        
           |  |  | 115 |         // Pour les règles spécifiques à Papyrus:
 | 
        
           |  |  | 116 |         $this->addPath('parse', $this->fixPath(dirname(__FILE__)) . 'Parse/');
 | 
        
           |  |  | 117 |         $this->addPath('render', $this->fixPath(dirname(__FILE__)) . 'Render/');
 | 
        
           | 178 | jpm | 118 |   | 
        
           |  |  | 119 |   | 
        
           |  |  | 120 |     }
 | 
        
           |  |  | 121 |   | 
        
           |  |  | 122 |     /**
 | 
        
           |  |  | 123 |     *
 | 
        
           |  |  | 124 |     * Renders tokens back into the source text, based on the requested format.
 | 
        
           |  |  | 125 |     *
 | 
        
           |  |  | 126 |     * @access public
 | 
        
           |  |  | 127 |     *
 | 
        
           |  |  | 128 |     * @param string $format The target output format, typically 'xhtml'.
 | 
        
           |  |  | 129 |     * If a rule does not support a given format, the output from that
 | 
        
           |  |  | 130 |     * rule is rule-specific.
 | 
        
           |  |  | 131 |     *
 | 
        
           |  |  | 132 |     * @return string The transformed wiki text.
 | 
        
           |  |  | 133 |     *
 | 
        
           |  |  | 134 |     */
 | 
        
           |  |  | 135 |     function render($format = 'Xhtml')
 | 
        
           |  |  | 136 |     {
 | 
        
           |  |  | 137 |         // the rendering method we're going to use from each rule
 | 
        
           |  |  | 138 |         $format = ucwords(strtolower($format));
 | 
        
           |  |  | 139 |   | 
        
           |  |  | 140 |         // the eventual output text
 | 
        
           |  |  | 141 |         $output = '';
 | 
        
           |  |  | 142 |   | 
        
           |  |  | 143 |         // when passing through the parsed source text, keep track of when
 | 
        
           |  |  | 144 |         // we are in a delimited section
 | 
        
           |  |  | 145 |         $in_delim = false;
 | 
        
           |  |  | 146 |   | 
        
           |  |  | 147 |         // when in a delimited section, capture the token key number
 | 
        
           |  |  | 148 |         $key = '';
 | 
        
           |  |  | 149 |   | 
        
           |  |  | 150 |         // load the format object
 | 
        
           |  |  | 151 |         $this->loadFormatObj($format);
 | 
        
           |  |  | 152 |   | 
        
           |  |  | 153 |         // pre-rendering activity
 | 
        
           | 224 | jpm | 154 |         if (isset($this->formatObj[$format]) && is_object($this->formatObj[$format])) {
 | 
        
           | 178 | jpm | 155 |             $output .= $this->formatObj[$format]->pre();
 | 
        
           |  |  | 156 |         }
 | 
        
           |  |  | 157 |   | 
        
           |  |  | 158 |         // load the render objects
 | 
        
           |  |  | 159 |         foreach (array_keys($this->parseObj) as $rule) {
 | 
        
           |  |  | 160 |             $this->loadRenderObj($format, $rule);
 | 
        
           |  |  | 161 |         }
 | 
        
           |  |  | 162 |   | 
        
           |  |  | 163 |         // pass through the parsed source text character by character
 | 
        
           |  |  | 164 |         $k = strlen($this->source);
 | 
        
           |  |  | 165 |         for ($i = 0; $i < $k; $i++) {
 | 
        
           |  |  | 166 |   | 
        
           |  |  | 167 |             // the current character
 | 
        
           |  |  | 168 |             $char = $this->source{$i};
 | 
        
           |  |  | 169 |   | 
        
           |  |  | 170 |             // are alredy in a delimited section?
 | 
        
           |  |  | 171 |             if ($in_delim) {
 | 
        
           |  |  | 172 |   | 
        
           |  |  | 173 |                 // yes; are we ending the section?
 | 
        
           |  |  | 174 |                 if ($char == chr($this->delim)) {
 | 
        
           |  |  | 175 |   | 
        
           |  |  | 176 |                     // yes, get the replacement text for the delimited
 | 
        
           |  |  | 177 |                     // token number and unset the flag.
 | 
        
           |  |  | 178 |                     $key = (int)$key;
 | 
        
           | 247 | jpm | 179 |                     $rule = null;
 | 
        
           |  |  | 180 |                     if (isset($this->tokens[$key][0])) {
 | 
        
           |  |  | 181 |                         $rule = $this->tokens[$key][0];
 | 
        
           |  |  | 182 |                     }
 | 
        
           |  |  | 183 |                     $opts = null;
 | 
        
           |  |  | 184 |                     if (isset($this->tokens[$key][1])) {
 | 
        
           |  |  | 185 |                         $opts = $this->tokens[$key][1];
 | 
        
           |  |  | 186 |                     }
 | 
        
           |  |  | 187 |                     if (isset($this->renderObj[$rule]) && is_object($this->renderObj[$rule])) {
 | 
        
           |  |  | 188 |                         $output .= $this->renderObj[$rule]->token($opts);
 | 
        
           |  |  | 189 |                     }
 | 
        
           | 178 | jpm | 190 |                     $in_delim = false;
 | 
        
           |  |  | 191 |   | 
        
           |  |  | 192 |                 } else {
 | 
        
           |  |  | 193 |   | 
        
           |  |  | 194 |                     // no, add to the dlimited token key number
 | 
        
           |  |  | 195 |                     $key .= $char;
 | 
        
           |  |  | 196 |   | 
        
           |  |  | 197 |                 }
 | 
        
           |  |  | 198 |   | 
        
           |  |  | 199 |             } else {
 | 
        
           |  |  | 200 |   | 
        
           |  |  | 201 |                 // not currently in a delimited section.
 | 
        
           |  |  | 202 |                 // are we starting into a delimited section?
 | 
        
           |  |  | 203 |                 if ($char == chr($this->delim)) {
 | 
        
           |  |  | 204 |                     // yes, reset the previous key and
 | 
        
           |  |  | 205 |                     // set the flag.
 | 
        
           |  |  | 206 |                     $key = '';
 | 
        
           |  |  | 207 |                     $in_delim = true;
 | 
        
           |  |  | 208 |                 } else {
 | 
        
           |  |  | 209 |                     // no, add to the output as-is
 | 
        
           |  |  | 210 |                     $output .= $char;
 | 
        
           |  |  | 211 |                 }
 | 
        
           |  |  | 212 |             }
 | 
        
           |  |  | 213 |         }
 | 
        
           |  |  | 214 |   | 
        
           |  |  | 215 |         // post-rendering activity
 | 
        
           | 224 | jpm | 216 |         if (isset($this->formatObj[$format]) && is_object($this->formatObj[$format])) {
 | 
        
           | 178 | jpm | 217 |             $output .= $this->formatObj[$format]->post();
 | 
        
           |  |  | 218 |         }
 | 
        
           |  |  | 219 |   | 
        
           |  |  | 220 |         // return the rendered source text.
 | 
        
           |  |  | 221 |         return $output;
 | 
        
           |  |  | 222 |     }
 | 
        
           |  |  | 223 |   | 
        
           |  |  | 224 |     /**
 | 
        
           |  |  | 225 |     *
 | 
        
           |  |  | 226 |     * Add a token to the Text_Wiki tokens array, and return a delimited
 | 
        
           |  |  | 227 |     * token number.
 | 
        
           |  |  | 228 |     *
 | 
        
           |  |  | 229 |     * @access public
 | 
        
           |  |  | 230 |     *
 | 
        
           |  |  | 231 |     * @param array $options An associative array of options for the new
 | 
        
           |  |  | 232 |     * token array element.  The keys and values are specific to the
 | 
        
           |  |  | 233 |     * rule, and may or may not be common to other rule options.  Typical
 | 
        
           |  |  | 234 |     * options keys are 'text' and 'type' but may include others.
 | 
        
           |  |  | 235 |     *
 | 
        
           |  |  | 236 |     * @param boolean $id_only If true, return only the token number, not
 | 
        
           |  |  | 237 |     * a delimited token string.
 | 
        
           |  |  | 238 |     *
 | 
        
           |  |  | 239 |     * @return string|int By default, return the number of the
 | 
        
           |  |  | 240 |     * newly-created token array element with a delimiter prefix and
 | 
        
           |  |  | 241 |     * suffix; however, if $id_only is set to true, return only the token
 | 
        
           |  |  | 242 |     * number (no delimiters).
 | 
        
           |  |  | 243 |     *
 | 
        
           |  |  | 244 |     */
 | 
        
           |  |  | 245 |     function addToken($rule, $options = array(), $id_only = false)
 | 
        
           |  |  | 246 |     {
 | 
        
           |  |  | 247 |         // increment the token ID number.  note that if you parse
 | 
        
           |  |  | 248 |         // multiple times with the same Text_Wiki object, the ID number
 | 
        
           |  |  | 249 |         // will not reset to zero.
 | 
        
           |  |  | 250 |         static $id;
 | 
        
           |  |  | 251 |         if (! isset($id)) {
 | 
        
           |  |  | 252 |             $id = 0;
 | 
        
           |  |  | 253 |         } else {
 | 
        
           |  |  | 254 |             $id ++;
 | 
        
           |  |  | 255 |         }
 | 
        
           |  |  | 256 |   | 
        
           |  |  | 257 |         // force the options to be an array
 | 
        
           |  |  | 258 |         settype($options, 'array');
 | 
        
           |  |  | 259 |   | 
        
           |  |  | 260 |         // add the token
 | 
        
           |  |  | 261 |         $this->tokens[$id] = array(
 | 
        
           |  |  | 262 |   | 
        
           |  |  | 263 |             1 => $options
 | 
        
           |  |  | 264 |         );
 | 
        
           |  |  | 265 |   | 
        
           |  |  | 266 |         // return a value
 | 
        
           |  |  | 267 |         if ($id_only) {
 | 
        
           |  |  | 268 |             // return the last token number
 | 
        
           |  |  | 269 |             return $id;
 | 
        
           |  |  | 270 |         } else {
 | 
        
           |  |  | 271 |             // return the token number with delimiters
 | 
        
           |  |  | 272 |             return chr($this->delim) . $id . chr($this->delim);
 | 
        
           |  |  | 273 |         }
 | 
        
           |  |  | 274 |     }
 | 
        
           |  |  | 275 | }
 | 
        
           |  |  | 276 |   | 
        
           |  |  | 277 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 278 | // |                                            PIED du PROGRAMME                                         |
 | 
        
           |  |  | 279 | // +------------------------------------------------------------------------------------------------------+
 | 
        
           |  |  | 280 |   | 
        
           |  |  | 281 |   | 
        
           |  |  | 282 |   | 
        
           |  |  | 283 | /* +--Fin du code ----------------------------------------------------------------------------------------+
 | 
        
           |  |  | 284 | *
 | 
        
           |  |  | 285 | * $Log: not supported by cvs2svn $
 | 
        
           | 345 | jpm | 286 | * Revision 1.5  2005/04/14 16:35:42  jpm
 | 
        
           |  |  | 287 | * Ajout de nouvelles actions pour Papyrus XHTML.
 | 
        
           |  |  | 288 | *
 | 
        
           | 335 | jpm | 289 | * Revision 1.4  2005/01/20 19:39:39  jpm
 | 
        
           |  |  | 290 | * Correction bogue du à la fonction file_exists qui renvoie false pour les fichiers présent dans le dossier Pear /usr/local/lib/php/.
 | 
        
           |  |  | 291 | *
 | 
        
           | 247 | jpm | 292 | * Revision 1.3  2004/12/07 12:17:37  jpm
 | 
        
           |  |  | 293 | * Correction message d'erreur.
 | 
        
           |  |  | 294 | *
 | 
        
           | 224 | jpm | 295 | * Revision 1.2  2004/11/26 12:13:03  jpm
 | 
        
           |  |  | 296 | * Correction de résidu...
 | 
        
           |  |  | 297 | *
 | 
        
           | 179 | jpm | 298 | * Revision 1.1  2004/11/26 12:11:49  jpm
 | 
        
           |  |  | 299 | * Ajout des action Papyrus à Text_Wiki.
 | 
        
           |  |  | 300 | *
 | 
        
           | 178 | jpm | 301 | * Revision 1.2  2004/11/25 15:36:41  jpm
 | 
        
           |  |  | 302 | * Suppression régle Delimiter car problème avec les délimitations de fin de ligne.
 | 
        
           |  |  | 303 | *
 | 
        
           |  |  | 304 | * Revision 1.1  2004/11/23 17:25:38  jpm
 | 
        
           |  |  | 305 | * Début classe PEAR WIKI pour la syntaxe Wikini.
 | 
        
           |  |  | 306 | *
 | 
        
           |  |  | 307 | *
 | 
        
           |  |  | 308 | * +-- Fin du code ----------------------------------------------------------------------------------------+
 | 
        
           |  |  | 309 | */
 | 
        
           |  |  | 310 | ?>
 |