Subversion Repositories Applications.papyrus

Rev

Rev 1160 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
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
// +------------------------------------------------------------------------------------------------------+
1166 jp_milcent 24
// CVS : $Id: Papyrus.class.php,v 1.15 2006-12-13 17:14:00 jp_milcent 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
1166 jp_milcent 39
*@version       $Revision: 1.15 $ $Date: 2006-12-13 17:14:00 $
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
    */
1166 jp_milcent 74
    var $rules = array();
178 jpm 75
 
76
    /**
77
    *
78
    * The list of rules to not-apply to the source text.
79
    *
80
    * @access public
81
    *
82
    * @var array
83
    *
84
    */
179 jpm 85
    var $disable = array();
178 jpm 86
 
87
    /**
88
    *
89
    * The delimiter for token numbers of parsed elements in source text.
90
    *
91
    * @access public
92
    *
93
    * @var string
94
    *
95
    */
96
    var $delim = 12;
97
 
247 jpm 98
    function Text_Papyrus($rules = null)
178 jpm 99
    {
247 jpm 100
        //Text_Wiki::Text_Wiki();
101
        if (is_array($rules)) {
102
            $this->rules = $rules;
103
        }
104
        // Nous devons sortir les fichiers de Text_Wiki du dépot Pear car la fonction file_exists de PHP utilisée dans
105
        // la méthode findfile de Text_Wiki renvoie false.
106
        $this->addPath('parse', $this->fixPath(dirname(__FILE__)) .'../../pear/Text/Wiki/Parse/');
107
        $this->addPath('render', $this->fixPath(dirname(__FILE__)) .'../../pear/Text/Wiki/Render/');
108
        // Pour les règles spécifiques à Papyrus:
109
        $this->addPath('parse', $this->fixPath(dirname(__FILE__)) . 'Parse/');
110
        $this->addPath('render', $this->fixPath(dirname(__FILE__)) . 'Render/');
178 jpm 111
 
112
 
113
    }
114
 
115
    /**
116
    *
117
    * Renders tokens back into the source text, based on the requested format.
118
    *
119
    * @access public
120
    *
121
    * @param string $format The target output format, typically 'xhtml'.
122
    * If a rule does not support a given format, the output from that
123
    * rule is rule-specific.
124
    *
125
    * @return string The transformed wiki text.
126
    *
127
    */
128
    function render($format = 'Xhtml')
129
    {
130
        // the rendering method we're going to use from each rule
131
        $format = ucwords(strtolower($format));
132
 
133
        // the eventual output text
134
        $output = '';
135
 
136
        // when passing through the parsed source text, keep track of when
137
        // we are in a delimited section
138
        $in_delim = false;
139
 
140
        // when in a delimited section, capture the token key number
141
        $key = '';
142
 
143
        // load the format object
144
        $this->loadFormatObj($format);
145
 
146
        // pre-rendering activity
224 jpm 147
        if (isset($this->formatObj[$format]) && is_object($this->formatObj[$format])) {
178 jpm 148
            $output .= $this->formatObj[$format]->pre();
149
        }
150
 
151
        // load the render objects
152
        foreach (array_keys($this->parseObj) as $rule) {
153
            $this->loadRenderObj($format, $rule);
154
        }
155
 
156
        // pass through the parsed source text character by character
157
        $k = strlen($this->source);
158
        for ($i = 0; $i < $k; $i++) {
159
 
160
            // the current character
161
            $char = $this->source{$i};
162
 
163
            // are alredy in a delimited section?
164
            if ($in_delim) {
165
 
166
                // yes; are we ending the section?
167
                if ($char == chr($this->delim)) {
168
 
169
                    // yes, get the replacement text for the delimited
170
                    // token number and unset the flag.
171
                    $key = (int)$key;
247 jpm 172
                    $rule = null;
173
                    if (isset($this->tokens[$key][0])) {
174
                        $rule = $this->tokens[$key][0];
175
                    }
176
                    $opts = null;
177
                    if (isset($this->tokens[$key][1])) {
178
                        $opts = $this->tokens[$key][1];
179
                    }
180
                    if (isset($this->renderObj[$rule]) && is_object($this->renderObj[$rule])) {
181
                        $output .= $this->renderObj[$rule]->token($opts);
182
                    }
178 jpm 183
                    $in_delim = false;
184
 
185
                } else {
186
 
187
                    // no, add to the dlimited token key number
188
                    $key .= $char;
189
 
190
                }
191
 
192
            } else {
193
 
194
                // not currently in a delimited section.
195
                // are we starting into a delimited section?
196
                if ($char == chr($this->delim)) {
197
                    // yes, reset the previous key and
198
                    // set the flag.
199
                    $key = '';
200
                    $in_delim = true;
201
                } else {
202
                    // no, add to the output as-is
203
                    $output .= $char;
204
                }
205
            }
206
        }
207
 
208
        // post-rendering activity
224 jpm 209
        if (isset($this->formatObj[$format]) && is_object($this->formatObj[$format])) {
178 jpm 210
            $output .= $this->formatObj[$format]->post();
211
        }
212
 
213
        // return the rendered source text.
214
        return $output;
215
    }
216
 
217
    /**
218
    *
219
    * Add a token to the Text_Wiki tokens array, and return a delimited
220
    * token number.
221
    *
222
    * @access public
223
    *
224
    * @param array $options An associative array of options for the new
225
    * token array element.  The keys and values are specific to the
226
    * rule, and may or may not be common to other rule options.  Typical
227
    * options keys are 'text' and 'type' but may include others.
228
    *
229
    * @param boolean $id_only If true, return only the token number, not
230
    * a delimited token string.
231
    *
232
    * @return string|int By default, return the number of the
233
    * newly-created token array element with a delimiter prefix and
234
    * suffix; however, if $id_only is set to true, return only the token
235
    * number (no delimiters).
236
    *
237
    */
238
    function addToken($rule, $options = array(), $id_only = false)
239
    {
240
        // increment the token ID number.  note that if you parse
241
        // multiple times with the same Text_Wiki object, the ID number
242
        // will not reset to zero.
243
        static $id;
244
        if (! isset($id)) {
245
            $id = 0;
246
        } else {
247
            $id ++;
248
        }
249
 
250
        // force the options to be an array
251
        settype($options, 'array');
252
 
253
        // add the token
254
        $this->tokens[$id] = array(
255
 
256
            1 => $options
257
        );
258
 
259
        // return a value
260
        if ($id_only) {
261
            // return the last token number
262
            return $id;
263
        } else {
264
            // return the token number with delimiters
265
            return chr($this->delim) . $id . chr($this->delim);
266
        }
267
    }
268
}
269
 
270
// +------------------------------------------------------------------------------------------------------+
271
// |                                            PIED du PROGRAMME                                         |
272
// +------------------------------------------------------------------------------------------------------+
273
 
274
 
275
 
276
/* +--Fin du code ----------------------------------------------------------------------------------------+
277
*
278
* $Log: not supported by cvs2svn $
1166 jp_milcent 279
* Revision 1.14  2006/12/13 10:53:09  jp_milcent
280
* Suppression de l'action Redirection transformée en Applette.
281
*
1160 jp_milcent 282
* Revision 1.13  2006/12/13 09:43:13  jp_milcent
283
* Suppression de l'action Plan transformée en Applette.
284
*
1158 jp_milcent 285
* Revision 1.12  2006/12/12 17:16:52  jp_milcent
286
* Suppression de l'action Nouveaute transformée en Applette.
287
*
1150 jp_milcent 288
* Revision 1.11  2006/12/12 13:33:57  jp_milcent
289
* Suppression de l'action MotCles transformée en Applette.
290
*
1144 jp_milcent 291
* Revision 1.10  2006/12/08 20:16:27  jp_milcent
292
* Suppression de l'action Lien remplacée par une applette.
293
*
1133 jp_milcent 294
* Revision 1.9  2006/12/08 15:29:33  jp_milcent
295
* Suppression des actions transformées en applette.
296
*
1117 jp_milcent 297
* Revision 1.8  2006/05/10 16:02:49  ddelon
298
* Finition multilinguise et schizo flo
299
*
841 ddelon 300
* Revision 1.7  2005/09/23 13:58:07  ddelon
301
* Php5, Projet et Redirection
302
*
453 ddelon 303
* Revision 1.6  2005/04/18 16:41:53  jpm
304
* Ajout des actions Plan et Syndication.
305
*
345 jpm 306
* Revision 1.5  2005/04/14 16:35:42  jpm
307
* Ajout de nouvelles actions pour Papyrus XHTML.
308
*
335 jpm 309
* Revision 1.4  2005/01/20 19:39:39  jpm
310
* Correction bogue du à la fonction file_exists qui renvoie false pour les fichiers présent dans le dossier Pear /usr/local/lib/php/.
311
*
247 jpm 312
* Revision 1.3  2004/12/07 12:17:37  jpm
313
* Correction message d'erreur.
314
*
224 jpm 315
* Revision 1.2  2004/11/26 12:13:03  jpm
316
* Correction de résidu...
317
*
179 jpm 318
* Revision 1.1  2004/11/26 12:11:49  jpm
319
* Ajout des action Papyrus à Text_Wiki.
320
*
178 jpm 321
* Revision 1.2  2004/11/25 15:36:41  jpm
322
* Suppression régle Delimiter car problème avec les délimitations de fin de ligne.
323
*
324
* Revision 1.1  2004/11/23 17:25:38  jpm
325
* Début classe PEAR WIKI pour la syntaxe Wikini.
326
*
327
*
328
* +-- Fin du code ----------------------------------------------------------------------------------------+
329
*/
330
?>