includes/wikiengine/Parse/Default/Deflist.php
changeset 1 fe660c52c48f
equal deleted inserted replaced
0:902822492a68 1:fe660c52c48f
       
     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 ?>