1
+ − 1
<?php
+ − 2
+ − 3
/**
+ − 4
*
+ − 5
* Parses for definition lists.
+ − 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: Deflist.php,v 1.3 2005/02/23 17:38:29 pmjones Exp $
+ − 16
*
+ − 17
*/
+ − 18
+ − 19
/**
+ − 20
*
+ − 21
* Parses for definition lists.
+ − 22
*
+ − 23
* This class implements a Text_Wiki_Parse to find source text marked as a
+ − 24
* definition list. In short, if a line starts with ':' then it is a
+ − 25
* definition list item; another ':' on the same line indicates the end
+ − 26
* of the definition term and the beginning of the definition narrative.
+ − 27
* The list items must be on sequential lines (no blank lines between
+ − 28
* them) -- a blank line indicates the beginning of a new list.
+ − 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_Deflist extends Text_Wiki_Parse {
+ − 39
+ − 40
+ − 41
/**
+ − 42
*
+ − 43
* The regular expression used to parse the source text and find
+ − 44
* matches conforming to this rule. Used by the parse() method.
+ − 45
*
+ − 46
* @access public
+ − 47
*
+ − 48
* @var string
+ − 49
*
+ − 50
* @see parse()
+ − 51
*
+ − 52
*/
+ − 53
+ − 54
var $regex = '/\n((: ).*\n)(?!(: |\n))/Us';
+ − 55
+ − 56
+ − 57
/**
+ − 58
*
+ − 59
* Generates a replacement for the matched text. Token options are:
+ − 60
*
+ − 61
* 'type' =>
+ − 62
* 'list_start' : the start of a definition list
+ − 63
* 'list_end' : the end of a definition list
+ − 64
* 'term_start' : the start of a definition term
+ − 65
* 'term_end' : the end of a definition term
+ − 66
* 'narr_start' : the start of definition narrative
+ − 67
* 'narr_end' : the end of definition narrative
+ − 68
* 'unknown' : unknown type of definition portion
+ − 69
*
+ − 70
* @access public
+ − 71
*
+ − 72
* @param array &$matches The array of matches from parse().
+ − 73
*
+ − 74
* @return A series of text and delimited tokens marking the different
+ − 75
* list text and list elements.
+ − 76
*
+ − 77
*/
+ − 78
+ − 79
function process(&$matches)
+ − 80
{
+ − 81
// the replacement text we will return to parse()
+ − 82
$return = '';
+ − 83
+ − 84
// the list of post-processing matches
+ − 85
$list = array();
+ − 86
+ − 87
// start the deflist
+ − 88
$options = array('type' => 'list_start');
+ − 89
$return .= $this->wiki->addToken($this->rule, $options);
+ − 90
+ − 91
// $matches[1] is the text matched as a list set by parse();
+ − 92
// create an array called $list that contains a new set of
+ − 93
// matches for the various definition-list elements.
+ − 94
preg_match_all(
+ − 95
'/^(: )(.*)?( : )(.*)?$/Ums',
+ − 96
$matches[1],
+ − 97
$list,
+ − 98
PREG_SET_ORDER
+ − 99
);
+ − 100
+ − 101
// add each term and narrative
+ − 102
foreach ($list as $key => $val) {
+ − 103
$return .= (
+ − 104
$this->wiki->addToken($this->rule, array('type' => 'term_start')) .
+ − 105
trim($val[2]) .
+ − 106
$this->wiki->addToken($this->rule, array('type' => 'term_end')) .
+ − 107
$this->wiki->addToken($this->rule, array('type' => 'narr_start')) .
+ − 108
trim($val[4]) .
+ − 109
$this->wiki->addToken($this->rule, array('type' => 'narr_end'))
+ − 110
);
+ − 111
}
+ − 112
+ − 113
+ − 114
// end the deflist
+ − 115
$options = array('type' => 'list_end');
+ − 116
$return .= $this->wiki->addToken($this->rule, $options);
+ − 117
+ − 118
// done!
+ − 119
return "\n" . $return . "\n\n";
+ − 120
}
+ − 121
}
+ − 122
?>