protected function Markdown::processListItems in Markdown 7
* Process the contents of a single ordered or unordered list, splitting it * into individual list items. *
Parameters
string $list_str: * @param string $marker_any_re * @return string
1 call to Markdown::processListItems()
- Markdown::_doLists_callback in includes/
Markdown.php - * List parsing callback *
File
- includes/
Markdown.php, line 1113
Class
- Markdown
- Markdown Parser Class
Namespace
MichelfCode
protected function processListItems($list_str, $marker_any_re) {
/**
* The $this->list_level global keeps track of when we're inside a list.
* Each time we enter a list, we increment it; when we leave a list,
* we decrement. If it's zero, we're not in a list anymore.
*
* We do this because when we're not inside a list, we want to treat
* something like this:
*
* I recommend upgrading to version
* 8. Oops, now this line is treated
* as a sub-list.
*
* As a single paragraph, despite the fact that the second line starts
* with a digit-period-space sequence.
*
* Whereas when we're inside a list (or sub-list), that line will be
* treated as the start of a sub-list. What a kludge, huh? This is
* an aspect of Markdown's syntax that's hard to parse perfectly
* without resorting to mind-reading. Perhaps the solution is to
* change the syntax rules such that sub-lists must start with a
* starting cardinal number; e.g. "1." or "a.".
*/
$this->list_level++;
// Trim trailing blank lines:
$list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
$list_str = preg_replace_callback('{
(\\n)? # leading line = $1
(^[ ]*) # leading whitespace = $2
(' . $marker_any_re . ' # list marker and space = $3
(?:[ ]+|(?=\\n)) # space only required if item is not empty
)
((?s:.*?)) # list item text = $4
(?:(\\n+(?=\\n))|\\n) # tailing blank line = $5
(?= \\n* (\\z | \\2 (' . $marker_any_re . ') (?:[ ]+|(?=\\n))))
}xm', array(
$this,
'_processListItems_callback',
), $list_str);
$this->list_level--;
return $list_str;
}