Subversion Repositories Applications.papyrus

Rev

Rev 1158 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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