/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Interwiki.php |
---|
New file |
0,0 → 1,120 |
<?php |
// $Id: Interwiki.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Interwiki extends Text_Wiki_Parse { |
var $regex = '([A-Za-z0-9_]+):([\/=&~#A-Za-z0-9_]+)'; |
/** |
* |
* Parser. We override the standard parser so we can |
* find both described interwiki links and standalone links. |
* |
* @access public |
* |
* @return void |
* |
*/ |
function parse() |
{ |
// described interwiki links |
$tmp_regex = '/\[' . $this->regex . ' (.+?)\]/'; |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'processDescr'), |
$this->wiki->source |
); |
// standalone interwiki links |
$tmp_regex = '/' . $this->regex . '/'; |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'process'), |
$this->wiki->source |
); |
} |
/** |
* |
* Generates a replacement for the matched standalone interwiki text. |
* Token options are: |
* |
* 'site' => The key name for the Text_Wiki interwiki array map, |
* usually the name of the interwiki site. |
* |
* 'page' => The page on the target interwiki to link to. |
* |
* 'text' => The text to display as the link. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
$options = array( |
'site' => $matches[1], |
'page' => $matches[2], |
'text' => $matches[0] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
/** |
* |
* Generates a replacement for described interwiki links. Token |
* options are: |
* |
* 'site' => The key name for the Text_Wiki interwiki array map, |
* usually the name of the interwiki site. |
* |
* 'page' => The page on the target interwiki to link to. |
* |
* 'text' => The text to display as the link. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function processDescr(&$matches) |
{ |
$options = array( |
'site' => $matches[1], |
'page' => $matches[2], |
'text' => $matches[3] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Paragraph.php |
---|
New file |
0,0 → 1,128 |
<?php |
// $Id: Paragraph.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki rule to find sections of the source |
* text that are paragraphs. A para is any line not starting with a token |
* delimiter, followed by two newlines. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Paragraph extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = "/^.*?\n\n/m"; |
var $conf = array( |
'skip' => array( |
'blockquote', // are we sure about this one? |
'code', |
'heading', |
'horiz', |
'deflist', |
'table', |
'list', |
'toc' |
) |
); |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'start' => The starting point of the paragraph. |
* |
* 'end' => The ending point of the paragraph. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
$delim = $this->wiki->delim; |
// was anything there? |
if (trim($matches[0]) == '') { |
return ''; |
} |
// does the match start with a delimiter? |
if (substr($matches[0], 0, 1) != $delim) { |
// no. |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . trim($matches[0]) . $end; |
} |
// the line starts with a delimiter. read in the delimited |
// token number, check the token, and see if we should |
// skip it. |
// loop starting at the second character (we already know |
// the first is a delimiter) until we find another |
// delimiter; the text between them is a token key number. |
$key = ''; |
$len = strlen($matches[0]); |
for ($i = 1; $i < $len; $i++) { |
$char = $matches[0]{$i}; |
if ($char == $delim) { |
break; |
} else { |
$key .= $char; |
} |
} |
// look at the token and see if it's skippable (if we skip, |
// it will not be marked as a paragraph) |
$token_type = strtolower($this->wiki->tokens[$key][0]); |
$skip = $this->getConf('skip', array()); |
if (in_array($token_type, $skip)) { |
// this type of token should not have paragraphs applied to it. |
// return the entire matched text. |
return $matches[0]; |
} else { |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . trim($matches[0]) . $end; |
} |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Emphasis.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id: Emphasis.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* emphasis (italics) as defined by text surrounded by two single-quotes. |
* On parsing, the text itself is left in place, but the starting and ending |
* instances of two single-quotes are replaced with tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_emphasis extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\/\/(()|.*)\/\//U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the text to be |
* emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Code.php |
---|
New file |
0,0 → 1,72 |
<?php |
// $Id: Code.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find sections marked as code |
* examples. Blocks are marked as the string <code> on a line by itself, |
* followed by the inline code example, and terminated with the string |
* </code> on a line by itself. The code example is run through the |
* native PHP highlight_string() function to colorize it, then surrounded |
* with <pre>...</pre> tags when rendered as XHTML. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Code extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/^(\<code( .+)?\>)\n(.+)\n(\<\/code\>)(\s|$)/Umsi'; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text, not including the <code></code> tags. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
// are there additional attribute arguments? |
$args = trim($matches[2]); |
if ($args == '') { |
$options = array( |
'text' => $matches[3], |
'attr' => array('type' => '') |
); |
} else { |
$options = array( |
'text' => $matches[3], |
'attr' => $this->getAttrs($args) |
); |
} |
return $this->wiki->addToken($this->rule, $options) . $matches[5]; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Embed.php |
---|
New file |
0,0 → 1,88 |
<?php |
// $Id: Embed.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to embed the contents of a URL |
* inside the page at render-time. Typically used to get script output. |
* This differs from the 'include' rule, which incorporates results at |
* parse-time; 'embed' output does not get parsed by Text_Wiki, while |
* 'include' ouput does. |
* |
* This rule is inherently not secure; it allows cross-site scripting to |
* occur if the embedded output has <script> or other similar tags. Be |
* careful. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Embed extends Text_Wiki_Parse { |
var $conf = array( |
'base' => '/path/to/scripts/' |
); |
var $file = null; |
var $output = null; |
var $vars = null; |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/(\[\[embed )(.+?)( .+?)?(\]\])/i'; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text, not including the <code></code> tags. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
// save the file location |
$this->file = $this->getConf('base', './') . $matches[2]; |
// extract attribs as variables in the local space |
$this->vars = $this->getAttrs($matches[3]); |
unset($this->vars['this']); |
extract($this->vars); |
// run the script |
ob_start(); |
include($this->file); |
$this->output = ob_get_contents(); |
ob_end_clean(); |
// done, place the script output directly in the source |
return $this->wiki->addToken( |
$this->rule, |
array('text' => $this->output) |
); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Strong.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id: Strong.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* strong emphasis (bold) as defined by text surrounded by three |
* single-quotes. On parsing, the text itself is left in place, but the |
* starting and ending instances of three single-quotes are replaced with |
* tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Strong extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\*\*(()|.*)\*\*/U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A pair of delimited tokens to be used as a placeholder in |
* the source text surrounding the text to be emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Delimiter.php |
---|
New file |
0,0 → 1,62 |
<?php |
// $Id: Delimiter.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find instances of the delimiter |
* character already embedded in the source text; it extracts them and replaces |
* them with a delimited token, then renders them as the delimiter itself |
* when the target format is XHTML. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Delimiter extends Text_Wiki_Parse { |
/** |
* |
* Constructor. Overrides the Text_Wiki_Parse constructor so that we |
* can set the $regex property dynamically (we need to include the |
* Text_Wiki $delim character. |
* |
* @param object &$obj The calling "parent" Text_Wiki object. |
* |
* @param string $name The token name to use for this rule. |
* |
*/ |
function Text_Wiki_Parse_delimiter(&$obj) |
{ |
parent::Text_Wiki_Parse($obj); |
$this->regex = '/' . $this->wiki->delim . '/'; |
} |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
return $this->wiki->addToken( |
$this->rule, |
array('text' => $this->wiki->delim) |
); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Center.php |
---|
New file |
0,0 → 1,60 |
<?php |
// $Id: Center.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find lines marked for centering. |
* The line must start with "= " (i.e., an equal-sign followed by a space). |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Center extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/\n\= (.*?)\n/'; |
/** |
* |
* Generates a token entry for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, |
array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, |
array('type' => 'end') |
); |
return "\n" . $start . $matches[1] . $end . "\n"; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Image.php |
---|
New file |
0,0 → 1,76 |
<?php |
// $Id: Image.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to embed the contents of a URL |
* inside the page. Typically used to get script output. |
* |
* This rule is inherently not secure; it allows cross-site scripting to |
* occur if the embedded output has <script> or other similar tags. Be |
* careful. |
* |
* In the future, we'll add a rule config options to set the base embed |
* path so that it is limited to one directory. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Image extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/(\[\[image )(.+?)(\]\])/i'; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'src' => The image source, typically a relative path name. |
* |
* 'opts' => Any macro options following the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
$pos = strpos($matches[2], ' '); |
if ($pos === false) { |
$options = array( |
'src' => $matches[2], |
'attr' => array()); |
} else { |
// everything after the space is attribute arguments |
$options = array( |
'src' => substr($matches[2], 0, $pos), |
'attr' => $this->getAttrs(substr($matches[2], $pos+1)) |
); |
} |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Function.php |
---|
New file |
0,0 → 1,115 |
<?php |
// $Id: Function.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
class Text_Wiki_Parse_Function extends Text_Wiki_Parse { |
var $regex = '/^(\<function\>)\n(.+)\n(\<\/function\>)(\s|$)/Umsi'; |
function process(&$matches) |
{ |
// default options |
$opts = array( |
'name' => null, |
'access' => null, |
'return' => null, |
'params' => array(), |
'throws' => array() |
); |
// split apart the markup lines and loop through them |
$lines = explode("\n", $matches[2]); |
foreach ($lines as $line) { |
// skip blank lines |
if (trim($line) == '') { |
continue; |
} |
// find the first ':' on the line; the left part is the |
// type, the right part is the value. skip lines without |
// a ':' on them. |
$pos = strpos($line, ':'); |
if ($pos === false) { |
continue; |
} |
// $type is the line type: name, access, return, param, throws |
// 012345678901234 |
// name: something |
$type = trim(substr($line, 0, $pos)); |
$val = trim(substr($line, $pos+1)); |
switch($type) { |
case 'a': |
case 'access': |
$opts['access'] = $val; |
break; |
case 'n': |
case 'name': |
$opts['name'] = $val; |
break; |
case 'p': |
case 'param': |
$tmp = explode(',', $val); |
$k = count($tmp); |
if ($k == 1) { |
$opts['params'][] = array( |
'type' => $tmp[0], |
'descr' => null, |
'default' => null |
); |
} elseif ($k == 2) { |
$opts['params'][] = array( |
'type' => $tmp[0], |
'descr' => $tmp[1], |
'default' => null |
); |
} else { |
$opts['params'][] = array( |
'type' => $tmp[0], |
'descr' => $tmp[1], |
'default' => $tmp[2] |
); |
} |
break; |
case 'r': |
case 'return': |
case 'returns': |
$opts['return'] = $val; |
break; |
case 't': |
case 'throws': |
$tmp = explode(',', $val); |
$k = count($tmp); |
if ($k == 1) { |
$opts['throws'][] = array( |
'type' => $tmp[0], |
'descr' => null |
); |
} else { |
$opts['throws'][] = array( |
'type' => $tmp[0], |
'descr' => $tmp[1] |
); |
} |
break; |
default: |
$opts[$type] = $val; |
break; |
} |
} |
// add the token back in place |
return $this->wiki->addToken($this->rule, $opts) . $matches[4]; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Newline.php |
---|
New file |
0,0 → 1,57 |
<?php |
// $Id: Newline.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to mark implied line breaks in the |
* source text, usually a single carriage return in the middle of a paragraph |
* or block-quoted text. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Newline extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/([^\n])\n([^\n])/m'; |
/** |
* |
* Generates a replacement token for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A delimited token to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
return $matches[1] . |
$this->wiki->addToken($this->rule) . |
$matches[2]; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Url.php |
---|
New file |
0,0 → 1,265 |
<?php |
/** |
* |
* Parse for URLS in the source text. |
* |
* Various URL markings are supported: inline (the URL by itself), |
* numbered or footnote reference (where the URL is enclosed in square brackets), and |
* named reference (where the URL is enclosed in square brackets and has a |
* name included inside the brackets). E.g.: |
* |
* inline -- http://example.com |
* numbered -- [http://example.com] |
* described -- [http://example.com Example Description] |
* |
* When rendering a URL token, this will convert URLs pointing to a .gif, |
* .jpg, or .png image into an inline <img /> tag (for the 'xhtml' |
* format). |
* |
* Token options are: |
* |
* 'type' => ['inline'|'footnote'|'descr'] the type of URL |
* |
* 'href' => the URL link href portion |
* |
* 'text' => the displayed text of the URL link |
* |
* $Id: Url.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Url extends Text_Wiki_Parse { |
/** |
* |
* Keeps a running count of numbered-reference URLs. |
* |
* @access public |
* |
* @var int |
* |
*/ |
var $footnoteCount = 0; |
/** |
* |
* URL schemes recognized by this rule. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $conf = array( |
'schemes' => array( |
'http://', |
'https://', |
'ftp://', |
'gopher://', |
'news://', |
'mailto:' |
) |
); |
/** |
* |
* Constructor. |
* |
* We override the constructor so we can comment the regex nicely. |
* |
* @access public |
* |
*/ |
function Text_Wiki_Parse_Url(&$obj) |
{ |
parent::Text_Wiki_Parse($obj); |
// convert the list of recognized schemes to a regex-safe string, |
// where the pattern delim is a slash |
$tmp = array(); |
$list = $this->getConf('schemes', array()); |
foreach ($list as $val) { |
$tmp[] = preg_quote($val, '/'); |
} |
$schemes = implode('|', $tmp); |
// build the regex |
$this->regex = |
"($schemes)" . // allowed schemes |
"(" . // start pattern |
"[^ \\/\"\'{$this->wiki->delim}]*\\/" . // no spaces, backslashes, slashes, double-quotes, single quotes, or delimiters; |
")*" . // end pattern |
"[^ \\t\\n\\/\"\'{$this->wiki->delim}]*" . |
"[A-Za-z0-9\\/?=&~_]"; |
} |
/** |
* |
* Find three different kinds of URLs in the source text. |
* |
* @access public |
* |
*/ |
function parse() |
{ |
// ------------------------------------------------------------- |
// |
// Described-reference (named) URLs. |
// |
// the regular expression for this kind of URL |
$tmp_regex = '/\[(' . $this->regex . ') ([^\]]+)\]/'; |
// use a custom callback processing method to generate |
// the replacement text for matches. |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'processDescr'), |
$this->wiki->source |
); |
// ------------------------------------------------------------- |
// |
// Numbered-reference (footnote-style) URLs. |
// |
// the regular expression for this kind of URL |
$tmp_regex = '/\[(' . $this->regex . ')\]/U'; |
// use a custom callback processing method to generate |
// the replacement text for matches. |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'processFootnote'), |
$this->wiki->source |
); |
// ------------------------------------------------------------- |
// |
// Normal inline URLs. |
// |
// the regular expression for this kind of URL |
$tmp_regex = '/(^|[^A-Za-z])(' . $this->regex . ')(.*?)/'; |
// use the standard callback for inline URLs |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'process'), |
$this->wiki->source |
); |
} |
/** |
* |
* Process inline URLs. |
* |
* @param array &$matches |
* |
* @param array $matches An array of matches from the parse() method |
* as generated by preg_replace_callback. $matches[0] is the full |
* matched string, $matches[1] is the first matched pattern, |
* $matches[2] is the second matched pattern, and so on. |
* |
* @return string The processed text replacement. |
* |
*/ |
function process(&$matches) |
{ |
// set options |
$options = array( |
'type' => 'inline', |
'href' => $matches[2], |
'text' => $matches[2] |
); |
// tokenize |
return $matches[1] . $this->wiki->addToken($this->rule, $options) . $matches[5]; |
} |
/** |
* |
* Process numbered (footnote) URLs. |
* |
* Token options are: |
* @param array &$matches |
* |
* @param array $matches An array of matches from the parse() method |
* as generated by preg_replace_callback. $matches[0] is the full |
* matched string, $matches[1] is the first matched pattern, |
* $matches[2] is the second matched pattern, and so on. |
* |
* @return string The processed text replacement. |
* |
*/ |
function processFootnote(&$matches) |
{ |
// keep a running count for footnotes |
$this->footnoteCount++; |
// set options |
$options = array( |
'type' => 'footnote', |
'href' => $matches[1], |
'text' => $this->footnoteCount |
); |
// tokenize |
return $this->wiki->addToken($this->rule, $options); |
} |
/** |
* |
* Process described-reference (named-reference) URLs. |
* |
* Token options are: |
* 'type' => ['inline'|'footnote'|'descr'] the type of URL |
* 'href' => the URL link href portion |
* 'text' => the displayed text of the URL link |
* |
* @param array &$matches |
* |
* @param array $matches An array of matches from the parse() method |
* as generated by preg_replace_callback. $matches[0] is the full |
* matched string, $matches[1] is the first matched pattern, |
* $matches[2] is the second matched pattern, and so on. |
* |
* @return string The processed text replacement. |
* |
*/ |
function processDescr(&$matches) |
{ |
// set options |
$options = array( |
'type' => 'descr', |
'href' => $matches[1], |
'text' => $matches[4] |
); |
// tokenize |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Html.php |
---|
New file |
0,0 → 1,57 |
<?php |
// $Id: Html.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* HTML to be redndred as-is. The block start is marked by <html> on its |
* own line, and the block end is marked by </html> on its own line. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Html extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/^\<html\>\n(.+)\n\<\/html\>(\s|$)/Umsi'; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'text' => The text of the HTML to be rendered as-is. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text following the HTML block. |
* |
*/ |
function process(&$matches) |
{ |
$options = array('text' => $matches[1]); |
return $this->wiki->addToken($this->rule, $options) . $matches[2]; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Italic.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id: Italic.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* emphasis (italics) as defined by text surrounded by two single-quotes. |
* On parsing, the text itself is left in place, but the starting and ending |
* instances of two single-quotes are replaced with tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Italic extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/''(()|[^'].*)''/U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the text to be |
* emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Blockquote.php |
---|
New file |
0,0 → 1,163 |
<?php |
/** |
* |
* Parse for block-quoted text. |
* |
* Find source text marked as a blockquote, identified by any number of |
* greater-than signs '>' at the start of the line, followed by a space, |
* and then the quote text; each '>' indicates an additional level of |
* quoting. |
* |
* $Id: Blockquote.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Blockquote extends Text_Wiki_Parse { |
/** |
* |
* Regex for parsing the source text. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/\n((\>).*\n)(?!(\>))/Us'; |
/** |
* |
* Generates a replacement for the matched text. |
* |
* Token options are: |
* |
* 'type' => |
* 'start' : the start of a blockquote |
* 'end' : the end of a blockquote |
* |
* 'level' => the indent level (0 for the first level, 1 for the |
* second, etc) |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A series of text and delimited tokens marking the different |
* list text and list elements. |
* |
*/ |
function process(&$matches) |
{ |
// the replacement text we will return to parse() |
$return = ''; |
// the list of post-processing matches |
$list = array(); |
// $matches[1] is the text matched as a list set by parse(); |
// create an array called $list that contains a new set of |
// matches for the various list-item elements. |
preg_match_all( |
'=^(\>+) (.*\n)=Ums', |
$matches[1], |
$list, |
PREG_SET_ORDER |
); |
// a stack of starts and ends; we keep this so that we know what |
// indent level we're at. |
$stack = array(); |
// loop through each list-item element. |
foreach ($list as $key => $val) { |
// $val[0] is the full matched list-item line |
// $val[1] is the number of initial '>' chars (indent level) |
// $val[2] is the quote text |
// we number levels starting at 1, not zero |
$level = strlen($val[1]); |
// get the text of the line |
$text = $val[2]; |
// add a level to the list? |
while ($level > count($stack)) { |
// the current indent level is greater than the number |
// of stack elements, so we must be starting a new |
// level. push the new level onto the stack with a |
// dummy value (boolean true)... |
array_push($stack, true); |
$return .= "\n"; |
// ...and add a start token to the return. |
$return .= $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'start', |
'level' => $level - 1 |
) |
); |
$return .= "\n\n"; |
} |
// remove a level? |
while (count($stack) > $level) { |
// as long as the stack count is greater than the |
// current indent level, we need to end list types. |
// continue adding end-list tokens until the stack count |
// and the indent level are the same. |
array_pop($stack); |
$return .= "\n\n"; |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => 'end', |
'level' => count($stack) |
) |
); |
$return .= "\n"; |
} |
// add the line text. |
$return .= $text; |
} |
// the last line may have been indented. go through the stack |
// and create end-tokens until the stack is empty. |
$return .= "\n"; |
while (count($stack) > 0) { |
array_pop($stack); |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => 'end', |
'level' => count($stack) |
) |
); |
} |
// we're done! send back the replacement text. |
return "\n$return\n\n"; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Anchor.php |
---|
New file |
0,0 → 1,67 |
<?php |
/** |
* |
* This class implements a Text_Wiki_Parse to add an anchor target name |
* in the wiki page. |
* |
* @author Manuel Holtgrewe <purestorm at ggnore dot net> |
* |
* @author Paul M. Jones <pmjones at ciaweb dot net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Anchor extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/(\[\[# )([-_A-Za-z0-9.]+?)( .+)?(\]\])/i'; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text, not including the <code></code> tags. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) { |
$name = $matches[2]; |
$text = $matches[3]; |
$start = $this->wiki->addToken( |
$this->rule, |
array('type' => 'start', 'name' => $name) |
); |
$end = $this->wiki->addToken( |
$this->rule, |
array('type' => 'end', 'name' => $name) |
); |
// done, place the script output directly in the source |
return $start . trim($text) . $end; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/List.php |
---|
New file |
0,0 → 1,230 |
<?php |
// $Id: List.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* a bulleted or numbered list. In short, if a line starts with '* ' then |
* it is a bullet list item; if a line starts with '# ' then it is a |
* number list item. Spaces in front of the * or # indicate an indented |
* sub-list. The list items must be on sequential lines, and may be |
* separated by blank lines to improve readability. Using a non-* non-# |
* non-whitespace character at the beginning of a line ends the list. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_List extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/\n((\*|#) .*\n)(?! {0,}(\* |# |\n))/Us'; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => |
* 'bullet_start' : the start of a bullet list |
* 'bullet_end' : the end of a bullet list |
* 'number_start' : the start of a number list |
* 'number_end' : the end of a number list |
* 'item_start' : the start of item text (bullet or number) |
* 'item_end' : the end of item text (bullet or number) |
* 'unknown' : unknown type of list or item |
* |
* 'level' => the indent level (0 for the first level, 1 for the |
* second, etc) |
* |
* 'count' => the list item number at this level. not needed for |
* xhtml, but very useful for PDF and RTF. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A series of text and delimited tokens marking the different |
* list text and list elements. |
* |
*/ |
function process(&$matches) |
{ |
// the replacement text we will return |
$return = ''; |
// the list of post-processing matches |
$list = array(); |
// a stack of list-start and list-end types; we keep this |
// so that we know what kind of list we're working with |
// (bullet or number) and what indent level we're at. |
$stack = array(); |
// the item count is the number of list items for any |
// given list-type on the stack |
$itemcount = array(); |
// have we processed the very first list item? |
$pastFirst = false; |
// populate $list with this set of matches. $matches[1] is the |
// text matched as a list set by parse(). |
preg_match_all( |
'=^( {0,})(\*|#) (.*)$=Ums', |
$matches[1], |
$list, |
PREG_SET_ORDER |
); |
// loop through each list-item element. |
foreach ($list as $key => $val) { |
// $val[0] is the full matched list-item line |
// $val[1] is the number of initial spaces (indent level) |
// $val[2] is the list item type (* or #) |
// $val[3] is the list item text |
// how many levels are we indented? (1 means the "root" |
// list level, no indenting.) |
$level = strlen($val[1]) + 1; |
// get the list item type |
if ($val[2] == '*') { |
$type = 'bullet'; |
} elseif ($val[2] == '#') { |
$type = 'number'; |
} else { |
$type = 'unknown'; |
} |
// get the text of the list item |
$text = $val[3]; |
// add a level to the list? |
if ($level > count($stack)) { |
// the current indent level is greater than the |
// number of stack elements, so we must be starting |
// a new list. push the new list type onto the |
// stack... |
array_push($stack, $type); |
// ...and add a list-start token to the return. |
$return .= $this->wiki->addToken( |
$this->rule, |
array( |
'type' => $type . '_list_start', |
'level' => $level - 1 |
) |
); |
} |
// remove a level from the list? |
while (count($stack) > $level) { |
// so we don't keep counting the stack, we set up a temp |
// var for the count. -1 becuase we're going to pop the |
// stack in the next command. $tmp will then equal the |
// current level of indent. |
$tmp = count($stack) - 1; |
// as long as the stack count is greater than the |
// current indent level, we need to end list types. |
// continue adding end-list tokens until the stack count |
// and the indent level are the same. |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => array_pop($stack) . '_list_end', |
'level' => $tmp |
) |
); |
// reset to the current (previous) list type so that |
// the new list item matches the proper list type. |
$type = $stack[$tmp - 1]; |
// reset the item count for the popped indent level |
unset($itemcount[$tmp + 1]); |
} |
// add to the item count for this list (taking into account |
// which level we are at). |
if (! isset($itemcount[$level])) { |
// first count |
$itemcount[$level] = 0; |
} else { |
// increment count |
$itemcount[$level]++; |
} |
// is this the very first item in the list? |
if (! $pastFirst) { |
$first = true; |
$pastFirst = true; |
} else { |
$first = false; |
} |
// create a list-item starting token. |
$start = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => $type . '_item_start', |
'level' => $level, |
'count' => $itemcount[$level], |
'first' => $first |
) |
); |
// create a list-item ending token. |
$end = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => $type . '_item_end', |
'level' => $level, |
'count' => $itemcount[$level] |
) |
); |
// add the starting token, list-item text, and ending token |
// to the return. |
$return .= $start . $val[3] . $end; |
} |
// the last list-item may have been indented. go through the |
// list-type stack and create end-list tokens until the stack |
// is empty. |
while (count($stack) > 0) { |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => array_pop($stack) . '_list_end', |
'level' => count($stack) |
) |
); |
} |
// we're done! send back the replacement text. |
return "\n" . $return . "\n\n"; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Bold.php |
---|
New file |
0,0 → 1,61 |
<?php |
// $Id: Bold.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Rule to find source text marked for |
* strong emphasis (bold) as defined by text surrounded by three |
* single-quotes. On parsing, the text itself is left in place, but the |
* starting and ending instances of three single-quotes are replaced with |
* tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Bold extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/'''(()|[^'].*)'''/U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A pair of delimited tokens to be used as a placeholder in |
* the source text surrounding the text to be emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken($this->rule, array('type' => 'start')); |
$end = $this->wiki->addToken($this->rule, array('type' => 'end')); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Phplookup.php |
---|
New file |
0,0 → 1,58 |
<?php |
// $Id: Phplookup.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* Find source text marked for |
* lookup in the PHP online manual. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Phplookup extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\[\[php (.+?)\]\]/"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* teletype text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the teletype text. |
* |
*/ |
function process(&$matches) |
{ |
return $this->wiki->addToken( |
$this->rule, array('text' => $matches[1]) |
); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Wikilink.php |
---|
New file |
0,0 → 1,158 |
<?php |
/** |
* |
* Parse for links to wiki pages. |
* |
* Wiki page names are typically in StudlyCapsStyle made of |
* WordsSmashedTogether. |
* |
* You can also create described links to pages in this style: |
* [WikiPageName nice text link to use for display] |
* |
* The token options for this rule are: |
* |
* 'page' => the wiki page name. |
* |
* 'text' => the displayed link text. |
* |
* 'anchor' => a named anchor on the target wiki page. |
* |
* $Id: Wikilink.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Wikilink extends Text_Wiki_Parse { |
/** |
* |
* Constructor. |
* |
* We override the Text_Wiki_Parse constructor so we can |
* explicitly comment each part of the $regex property. |
* |
* @access public |
* |
* @param object &$obj The calling "parent" Text_Wiki object. |
* |
*/ |
function Text_Wiki_Parse_Wikilink(&$obj) |
{ |
parent::Text_Wiki_Parse($obj); |
// allows numbers as "lowercase letters" in the regex |
$this->regex = |
"(!?" . // START WikiPage pattern (1) |
"[A-Z]" . // 1 upper |
"[A-Za-z0-9]*" . // 0+ alpha or digit |
"[a-z0-9]+" . // 1+ lower or digit |
"[A-Z]" . // 1 upper |
"[A-Za-z0-9]*" . // 0+ or more alpha or digit |
")" . // END WikiPage pattern (/1) |
"((\#" . // START Anchor pattern (2)(3) |
"[A-Za-z]" . // 1 alpha |
"(" . // start sub pattern (4) |
"[-A-Za-z0-9_:.]*" . // 0+ dash, alpha, digit, underscore, colon, dot |
"[-A-Za-z0-9_]" . // 1 dash, alpha, digit, or underscore |
")?)?)"; // end subpatterns (/4)(/3)(/2) |
} |
/** |
* |
* First parses for described links, then for standalone links. |
* |
* @access public |
* |
* @return void |
* |
*/ |
function parse() |
{ |
// described wiki links |
$tmp_regex = '/\[' . $this->regex . ' (.+?)\]/'; |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'processDescr'), |
$this->wiki->source |
); |
// standalone wiki links |
$tmp_regex = '/(^|[^A-Za-z0-9\-_])' . $this->regex . '/'; |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'process'), |
$this->wiki->source |
); |
} |
/** |
* |
* Generate a replacement for described links. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function processDescr(&$matches) |
{ |
// set the options |
$options = array( |
'page' => $matches[1], |
'text' => $matches[5], |
'anchor' => $matches[3] |
); |
// create and return the replacement token and preceding text |
return $this->wiki->addToken($this->rule, $options); // . $matches[7]; |
} |
/** |
* |
* Generate a replacement for standalone links. |
* |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text prior to the match. |
* |
*/ |
function process(&$matches) |
{ |
// when prefixed with !, it's explicitly not a wiki link. |
// return everything as it was. |
if ($matches[2]{0} == '!') { |
return $matches[1] . substr($matches[2], 1) . $matches[3]; |
} |
// set the options |
$options = array( |
'page' => $matches[2], |
'text' => $matches[2] . $matches[3], |
'anchor' => $matches[3] |
); |
// create and return the replacement token and preceding text |
return $matches[1] . $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Superscript.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id: Superscript.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* strong emphasis (bold) as defined by text surrounded by three |
* single-quotes. On parsing, the text itself is left in place, but the |
* starting and ending instances of three single-quotes are replaced with |
* tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Superscript extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\^\^(()|.*)\^\^/U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A pair of delimited tokens to be used as a placeholder in |
* the source text surrounding the text to be emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Include.php |
---|
New file |
0,0 → 1,84 |
<?php |
// $Id: Include.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to include the results of a |
* script directly into the source at parse-time; thus, the output of the |
* script will be parsed by Text_Wiki. This differs from the 'embed' |
* rule, which incorporates the results at render-time, meaning that the |
* 'embed' content is not parsed by Text_Wiki. |
* |
* DANGER! |
* |
* This rule is inherently not secure; it allows cross-site scripting to |
* occur if the embedded output has <script> or other similar tags. Be |
* careful. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Include extends Text_Wiki_Parse { |
var $conf = array( |
'base' => '/path/to/scripts/' |
); |
var $file = null; |
var $output = null; |
var $vars = null; |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/(\[\[include )(.+?)( .+?)?(\]\])/i'; |
/** |
* |
* Includes the results of the script directly into the source; the output |
* will subsequently be parsed by the remaining Text_Wiki rules. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return The results of the included script. |
* |
*/ |
function process(&$matches) |
{ |
// save the file location |
$this->file = $this->getConf('base', './') . $matches[2]; |
// extract attribs as variables in the local space |
$this->vars = $this->getAttrs($matches[3]); |
unset($this->vars['this']); |
extract($this->vars); |
// run the script |
ob_start(); |
include($this->file); |
$this->output = ob_get_contents(); |
ob_end_clean(); |
// done, place the script output directly in the source |
return $this->output; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Colortext.php |
---|
New file |
0,0 → 1,74 |
<?php |
// $Id: Colortext.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* coloring. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Colortext extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\#\#(.+?)\|(.+?)\#\#/"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* 'color' => the color indicator |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the text to be |
* emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'start', |
'color' => $matches[1] |
) |
); |
$end = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'end', |
'color' => $matches[1] |
) |
); |
return $start . $matches[2] . $end; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Break.php |
---|
New file |
0,0 → 1,54 |
<?php |
// $Id: Break.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to mark forced line breaks in the |
* source text. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Break extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/ _\n/'; |
/** |
* |
* Generates a replacement token for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A delimited token to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
return $this->wiki->addToken($this->rule); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Toc.php |
---|
New file |
0,0 → 1,112 |
<?php |
// $Id: Toc.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find all heading tokens and |
* build a table of contents. The [[toc]] tag gets replaced with a list |
* of all the level-2 through level-6 headings. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Toc extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\n\[\[toc( .*)?\]\]\n/m"; |
/** |
* |
* Generates a replacement for the matched text. |
* |
* Token options are: |
* |
* 'type' => ['list_start'|'list_end'|'item_start'|'item_end'|'target'] |
* |
* 'level' => The heading level (1-6). |
* |
* 'count' => Which entry number this is in the list. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A token indicating the TOC collection point. |
* |
*/ |
function process(&$matches) |
{ |
$count = 0; |
if (isset($matches[1])) { |
$attr = $this->getAttrs(trim($matches[1])); |
} else { |
$attr = array(); |
} |
$output = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'list_start', |
'level' => 0, |
'attr' => $attr |
) |
); |
foreach ($this->wiki->getTokens('Heading') as $key => $val) { |
if ($val[1]['type'] != 'start') { |
continue; |
} |
$options = array( |
'type' => 'item_start', |
'id' => $val[1]['id'], |
'level' => $val[1]['level'], |
'count' => $count ++ |
); |
$output .= $this->wiki->addToken($this->rule, $options); |
$output .= $val[1]['text']; |
$output .= $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'item_end', |
'level' => $val[1]['level'] |
) |
); |
} |
$output .= $this->wiki->addToken( |
$this->rule, array( |
'type' => 'list_end', |
'level' => 0 |
) |
); |
return $output; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Table.php |
---|
New file |
0,0 → 1,208 |
<?php |
// $Id: Table.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as a |
* set of table rows, where a line start and ends with double-pipes (||) |
* and uses double-pipes to separate table cells. The rows must be on |
* sequential lines (no blank lines between them) -- a blank line |
* indicates the beginning of a new table. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Table extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/\n((\|\|).*)(\n)(?!(\|\|))/Us'; |
/** |
* |
* Generates a replacement for the matched text. |
* |
* Token options are: |
* |
* 'type' => |
* 'table_start' : the start of a bullet list |
* 'table_end' : the end of a bullet list |
* 'row_start' : the start of a number list |
* 'row_end' : the end of a number list |
* 'cell_start' : the start of item text (bullet or number) |
* 'cell_end' : the end of item text (bullet or number) |
* |
* 'cols' => the number of columns in the table (for 'table_start') |
* |
* 'rows' => the number of rows in the table (for 'table_start') |
* |
* 'span' => column span (for 'cell_start') |
* |
* 'attr' => column attribute flag (for 'cell_start') |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A series of text and delimited tokens marking the different |
* table elements and cell text. |
* |
*/ |
function process(&$matches) |
{ |
// our eventual return value |
$return = ''; |
// the number of columns in the table |
$num_cols = 0; |
// the number of rows in the table |
$num_rows = 0; |
// rows are separated by newlines in the matched text |
$rows = explode("\n", $matches[1]); |
// loop through each row |
foreach ($rows as $row) { |
// increase the row count |
$num_rows ++; |
// start a new row |
$return .= $this->wiki->addToken( |
$this->rule, |
array('type' => 'row_start') |
); |
// cells are separated by double-pipes |
$cell = explode("||", $row); |
// get the number of cells (columns) in this row |
$last = count($cell) - 1; |
// is this more than the current column count? |
// (we decrease by 1 because we never use cell zero) |
if ($last - 1 > $num_cols) { |
// increase the column count |
$num_cols = $last - 1; |
} |
// by default, cells span only one column (their own) |
$span = 1; |
// ignore cell zero, and ignore the "last" cell; cell zero |
// is before the first double-pipe, and the "last" cell is |
// after the last double-pipe. both are always empty. |
for ($i = 1; $i < $last; $i ++) { |
// if there is no content at all, then it's an instance |
// of two sets of || next to each other, indicating a |
// span. |
if ($cell[$i] == '') { |
// add to the span and loop to the next cell |
$span += 1; |
continue; |
} else { |
// this cell has content. |
// find any special "attr"ibute cell markers |
if (substr($cell[$i], 0, 2) == '> ') { |
// right-align |
$attr = 'right'; |
$cell[$i] = substr($cell[$i], 2); |
} elseif (substr($cell[$i], 0, 2) == '= ') { |
// center-align |
$attr = 'center'; |
$cell[$i] = substr($cell[$i], 2); |
} elseif (substr($cell[$i], 0, 2) == '< ') { |
// left-align |
$attr = 'left'; |
$cell[$i] = substr($cell[$i], 2); |
} elseif (substr($cell[$i], 0, 2) == '~ ') { |
$attr = 'header'; |
$cell[$i] = substr($cell[$i], 2); |
} else { |
$attr = null; |
} |
// start a new cell... |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => 'cell_start', |
'attr' => $attr, |
'span' => $span |
) |
); |
// ...add the content... |
$return .= trim($cell[$i]); |
// ...and end the cell. |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => 'cell_end', |
'attr' => $attr, |
'span' => $span |
) |
); |
// reset the span. |
$span = 1; |
} |
} |
// end the row |
$return .= $this->wiki->addToken( |
$this->rule, |
array('type' => 'row_end') |
); |
} |
// wrap the return value in start and end tokens |
$return = |
$this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'table_start', |
'rows' => $num_rows, |
'cols' => $num_cols |
) |
) |
. $return . |
$this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'table_end' |
) |
); |
// we're done! |
return "\n$return\n\n"; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Tt.php |
---|
New file |
0,0 → 1,69 |
<?php |
/** |
* |
* Find source text marked for teletype (monospace). |
* |
* Defined by text surrounded by two curly braces. On parsing, the text |
* itself is left in place, but the starting and ending instances of |
* curly braces are replaced with tokens. |
* |
* Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* teletype text. The text itself is left in the source. |
* |
* |
* $Id: Tt.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Tt extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/{{({*?.*}*?)}}/U"; |
/** |
* |
* Generates a replacement for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the teletype text. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Raw.php |
---|
New file |
0,0 → 1,55 |
<?php |
// $Id: Raw.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki rule to find sections of the source |
* text that are not to be processed by Text_Wiki. These blocks of "raw" |
* text will be rendered as they were found. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Raw extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = "/``(.*)``/U"; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
$options = array('text' => $matches[1]); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Deflist.php |
---|
New file |
0,0 → 1,104 |
<?php |
// $Id: Deflist.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as a |
* definition list. In short, if a line starts with ':' then it is a |
* definition list item; another ':' on the same lines indicates the end |
* of the definition term and the beginning of the definition narrative. |
* The list items must be on sequential lines (no blank lines between |
* them) -- a blank line indicates the beginning of a new list. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Deflist extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/\n((: ).*\n)(?!(: |\n))/Us'; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => |
* 'list_start' : the start of a definition list |
* 'list_end' : the end of a definition list |
* 'term_start' : the start of a definition term |
* 'term_end' : the end of a definition term |
* 'narr_start' : the start of definition narrative |
* 'narr_end' : the end of definition narrative |
* 'unknown' : unknown type of definition portion |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A series of text and delimited tokens marking the different |
* list text and list elements. |
* |
*/ |
function process(&$matches) |
{ |
// the replacement text we will return to parse() |
$return = ''; |
// the list of post-processing matches |
$list = array(); |
// start the deflist |
$options = array('type' => 'list_start'); |
$return .= $this->wiki->addToken($this->rule, $options); |
// $matches[1] is the text matched as a list set by parse(); |
// create an array called $list that contains a new set of |
// matches for the various definition-list elements. |
preg_match_all( |
'/^(: )(.*)?( : )(.*)?$/Ums', |
$matches[1], |
$list, |
PREG_SET_ORDER |
); |
// add each term and narrative |
foreach ($list as $key => $val) { |
$return .= ( |
$this->wiki->addToken($this->rule, array('type' => 'term_start')) . |
trim($val[2]) . |
$this->wiki->addToken($this->rule, array('type' => 'term_end')) . |
$this->wiki->addToken($this->rule, array('type' => 'narr_start')) . |
trim($val[4]) . |
$this->wiki->addToken($this->rule, array('type' => 'narr_end')) |
); |
} |
// end the deflist |
$options = array('type' => 'list_end'); |
$return .= $this->wiki->addToken($this->rule, $options); |
// done! |
return "\n" . $return . "\n\n"; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Horiz.php |
---|
New file |
0,0 → 1,52 |
<?php |
// $Id: Horiz.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked to |
* be a horizontal rule, as defined by four dashed on their own line. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Horiz extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/^([-]{4,})$/m'; |
/** |
* |
* Generates a replacement token for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A token marking the horizontal rule. |
* |
*/ |
function process(&$matches) |
{ |
return $this->wiki->addToken($this->rule); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Prefilter.php |
---|
New file |
0,0 → 1,62 |
<?php |
// $Id: Prefilter.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* "Pre-filter" the source text. |
* |
* Convert DOS and Mac line endings to Unix, concat lines ending in a |
* backslash \ with the next line, convert tabs to 4-spaces, add newlines |
* to the top and end of the source text, compress 3 or more newlines to |
* 2 newlines. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Prefilter extends Text_Wiki_Parse { |
/** |
* |
* Simple parsing method. |
* |
* @access public |
* |
*/ |
function parse() |
{ |
// convert DOS line endings |
$this->wiki->source = str_replace("\r\n", "\n", |
$this->wiki->source); |
// convert Macintosh line endings |
$this->wiki->source = str_replace("\r", "\n", |
$this->wiki->source); |
// concat lines ending in a backslash |
$this->wiki->source = str_replace("\\\n", "", |
$this->wiki->source); |
// convert tabs to four-spaces |
$this->wiki->source = str_replace("\t", " ", |
$this->wiki->source); |
// add extra newlines at the top and end; this |
// seems to help many rules. |
$this->wiki->source = "\n" . $this->wiki->source . "\n\n"; |
// finally, compress all instances of 3 or more newlines |
// down to two newlines. |
$find = "/\n{3,}/m"; |
$replace = "\n\n"; |
$this->wiki->source = preg_replace($find, $replace, |
$this->wiki->source); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Revise.php |
---|
New file |
0,0 → 1,130 |
<?php |
// $Id: Revise.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* revision. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Revise extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\@\@({*?.*}*?)\@\@/U"; |
/** |
* |
* Config options. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $conf = array( |
'delmark' => '---', |
'insmark' => '+++' |
); |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* inserted text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the teletype text. |
* |
*/ |
function process(&$matches) |
{ |
$output = ''; |
$src = $matches[1]; |
$delmark = $this->getConf('delmark'); // --- |
$insmark = $this->getConf('insmark'); // +++ |
// '---' must be before '+++' (if they both appear) |
$del = strpos($src, $delmark); |
$ins = strpos($src, $insmark); |
// if neither is found, return right away |
if ($del === false && $ins === false) { |
return $matches[0]; |
} |
// handle text to be deleted |
if ($del !== false) { |
// move forward to the end of the deletion mark |
$del += strlen($delmark); |
if ($ins === false) { |
// there is no insertion text following |
$text = substr($src, $del); |
} else { |
// there is insertion text following, |
// mitigate the length |
$text = substr($src, $del, $ins - $del); |
} |
$output .= $this->wiki->addToken( |
$this->rule, array('type' => 'del_start') |
); |
$output .= $text; |
$output .= $this->wiki->addToken( |
$this->rule, array('type' => 'del_end') |
); |
} |
// handle text to be inserted |
if ($ins !== false) { |
// move forward to the end of the insert mark |
$ins += strlen($insmark); |
$text = substr($src, $ins); |
$output .= $this->wiki->addToken( |
$this->rule, array('type' => 'ins_start') |
); |
$output .= $text; |
$output .= $this->wiki->addToken( |
$this->rule, array('type' => 'ins_end') |
); |
} |
return $output; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Heading.php |
---|
New file |
0,0 → 1,89 |
<?php |
// $Id: Heading.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked to |
* be a heading element, as defined by text on a line by itself prefixed |
* with a number of plus signs (+). The heading text itself is left in |
* the source, but is prefixed and suffixed with delimited tokens marking |
* the start and end of the heading. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Heading extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/^(\+{1,6}) (.*)/m'; |
var $conf = array( |
'id_prefix' => 'toc' |
); |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* heading text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the heading text. |
* |
*/ |
function process(&$matches) |
{ |
// keep a running count for header IDs. we use this later |
// when constructing TOC entries, etc. |
static $id; |
if (! isset($id)) { |
$id = 0; |
} |
$prefix = htmlspecialchars($this->getConf('id_prefix')); |
$start = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'start', |
'level' => strlen($matches[1]), |
'text' => $matches[2], |
'id' => $prefix . $id ++ |
) |
); |
$end = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'end', |
'level' => strlen($matches[1]) |
) |
); |
return $start . $matches[2] . $end . "\n"; |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Freelink.php |
---|
New file |
0,0 → 1,111 |
<?php |
// $Id: Freelink.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as a |
* wiki freelink, and automatically create a link to that page. |
* |
* A freelink is any page name not conforming to the standard |
* StudlyCapsStyle for a wiki page name. For example, a page normally |
* named MyHomePage can be renamed and referred to as ((My Home Page)) -- |
* note the spaces in the page name. You can also make a "nice-looking" |
* link without renaming the target page; e.g., ((MyHomePage|My Home |
* Page)). Finally, you can use named anchors on the target page: |
* ((MyHomePage|My Home Page#Section1)). |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Freelink extends Text_Wiki_Parse { |
/** |
* |
* Constructor. We override the Text_Wiki_Parse constructor so we can |
* explicitly comment each part of the $regex property. |
* |
* @access public |
* |
* @param object &$obj The calling "parent" Text_Wiki object. |
* |
*/ |
function Text_Wiki_Parse_Freelink(&$obj) |
{ |
parent::Text_Wiki_Parse($obj); |
$this->regex = |
'/' . // START regex |
"\\(\\(" . // double open-parens |
"(" . // START freelink page patter |
"[-A-Za-z0-9 _+\\/.,;:!?'\"\\[\\]\\{\\}&\xc0-\xff]+" . // 1 or more of just about any character |
")" . // END freelink page pattern |
"(" . // START display-name |
"\|" . // a pipe to start the display name |
"[-A-Za-z0-9 _+\\/.,;:!?'\"\\[\\]\\{\\}&\xc0-\xff]+" . // 1 or more of just about any character |
")?" . // END display-name pattern 0 or 1 |
"(" . // START pattern for named anchors |
"\#" . // a hash mark |
"[A-Za-z]" . // 1 alpha |
"[-A-Za-z0-9_:.]*" . // 0 or more alpha, digit, underscore |
")?" . // END named anchors pattern 0 or 1 |
"()\\)\\)" . // double close-parens |
'/'; // END regex |
} |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'page' => the wiki page name (e.g., HomePage). |
* |
* 'text' => alternative text to be displayed in place of the wiki |
* page name. |
* |
* 'anchor' => a named anchor on the target wiki page |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
// use nice variable names |
$page = $matches[1]; |
$text = $matches[2]; |
// get rid of the leading # from the anchor, if any |
$anchor = substr($matches[3], 1); |
// is the page given a new text appearance? |
if (trim($text) == '') { |
// no |
$text = $page; |
} else { |
// yes, strip the leading | character |
$text = substr($text, 1); |
} |
// set the options |
$options = array( |
'page' => $page, |
'text' => $text, |
'anchor' => $anchor |
); |
// return a token placeholder |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/tags/v5.0-ouadji/api/pear/Text/Wiki/Parse/Tighten.php |
---|
New file |
0,0 → 1,32 |
<?php |
// $Id: Tighten.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* The rule removes all remaining newlines. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Tighten extends Text_Wiki_Parse { |
/** |
* |
* Apply tightening directly to the source text. |
* |
* @access public |
* |
*/ |
function parse() |
{ |
$this->wiki->source = str_replace("\n", '', |
$this->wiki->source); |
} |
} |
?> |