import of Diogenes 0.9.18
[diogenes.git] / include / Text / Wiki / Parse / Default / Code.php
1 <?php
2
3 /**
4 *
5 * Parses for text marked as a code example block.
6 *
7 * @category Text
8 *
9 * @package Text_Wiki
10 *
11 * @author Paul M. Jones <pmjones@php.net>
12 *
13 * @license LGPL
14 *
15 * @version $Id: Code.php,v 1.3 2005/02/23 17:38:29 pmjones Exp $
16 *
17 */
18
19 /**
20 *
21 * Parses for text marked as a code example block.
22 *
23 * This class implements a Text_Wiki_Parse to find sections marked as code
24 * examples. Blocks are marked as the string <code> on a line by itself,
25 * followed by the inline code example, and terminated with the string
26 * </code> on a line by itself. The code example is run through the
27 * native PHP highlight_string() function to colorize it, then surrounded
28 * with <pre>...</pre> tags when rendered as XHTML.
29 *
30 * @category Text
31 *
32 * @package Text_Wiki
33 *
34 * @author Paul M. Jones <pmjones@php.net>
35 *
36 */
37
38 class Text_Wiki_Parse_Code extends Text_Wiki_Parse {
39
40
41 /**
42 *
43 * The regular expression used to find source text matching this
44 * rule.
45 *
46 * @access public
47 *
48 * @var string
49 *
50 */
51
52 var $regex = '/^(\<code( .+)?\>)\n(.+)\n(\<\/code\>)(\s|$)/Umsi';
53
54
55 /**
56 *
57 * Generates a token entry for the matched text. Token options are:
58 *
59 * 'text' => The full matched text, not including the <code></code> tags.
60 *
61 * @access public
62 *
63 * @param array &$matches The array of matches from parse().
64 *
65 * @return A delimited token number to be used as a placeholder in
66 * the source text.
67 *
68 */
69
70 function process(&$matches)
71 {
72 // are there additional attribute arguments?
73 $args = trim($matches[2]);
74
75 if ($args == '') {
76 $options = array(
77 'text' => $matches[3],
78 'attr' => array('type' => '')
79 );
80 } else {
81 // get the attributes...
82 $attr = $this->getAttrs($args);
83
84 // ... and make sure we have a 'type'
85 if (! isset($attr['type'])) {
86 $attr['type'] = '';
87 }
88
89 // retain the options
90 $options = array(
91 'text' => $matches[3],
92 'attr' => $attr
93 );
94 }
95
96 return $this->wiki->addToken($this->rule, $options) . $matches[5];
97 }
98 }
99 ?>