function Markdown_Parser::processListItems in Markdown 6
Same name and namespace in other branches
- 5 markdown.php \Markdown_Parser::processListItems()
 
1 call to Markdown_Parser::processListItems()
File
- ./
markdown.php, line 1046  
Class
Code
function processListItems($list_str, $marker_any_re) {
  #
  #	Process the contents of a single ordered or unordered list, splitting it
  #	into individual list items.
  #
  # 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;
}