Release diogenes-0.9.22
[diogenes.git] / include / Text / Wiki / Parse / Default / Code.php
CommitLineData
6855525e
JL
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
38class 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?>