You are here

function Markdown_Parser::doAnchors in Markdown 5

Same name and namespace in other branches
  1. 6 markdown.php \Markdown_Parser::doAnchors()

File

./markdown.php, line 652

Class

Markdown_Parser

Code

function doAnchors($text) {

  #

  # Turn Markdown link shortcuts into XHTML <a> tags.

  #
  if ($this->in_anchor) {
    return $text;
  }
  $this->in_anchor = true;

  #

  # First, handle reference-style links: [link text] [id]

  #
  $text = preg_replace_callback('{
			(					# wrap whole match in $1
			  \\[
				(' . $this->nested_brackets_re . ')	# link text = $2
			  \\]

			  [ ]?				# one optional space
			  (?:\\n[ ]*)?		# one optional newline followed by spaces

			  \\[
				(.*?)		# id = $3
			  \\]
			)
			}xs', array(
    &$this,
    '_doAnchors_reference_callback',
  ), $text);

  #

  # Next, inline-style links: [link text](url "optional title")

  #
  $text = preg_replace_callback('{
			(				# wrap whole match in $1
			  \\[
				(' . $this->nested_brackets_re . ')	# link text = $2
			  \\]
			  \\(			# literal paren
				[ ]*
				(?:
					<(\\S*)>	# href = $3
				|
					(' . $this->nested_url_parenthesis_re . ')	# href = $4
				)
				[ ]*
				(			# $5
				  ([\'"])	# quote char = $6
				  (.*?)		# Title = $7
				  \\6		# matching quote
				  [ ]*	# ignore any spaces/tabs between closing quote and )
				)?			# title is optional
			  \\)
			)
			}xs', array(
    &$this,
    '_DoAnchors_inline_callback',
  ), $text);

  #

  # Last, handle reference-style shortcuts: [link text]

  # These must come last in case you've also got [link test][1]

  # or [link test](/foo)

  #

  //		$text = preg_replace_callback('{
  //			(					# wrap whole match in $1
  //			  \[
  //				([^\[\]]+)		# link text = $2; can\'t contain [ or ]
  //			  \]
  //			)
  //			}xs',
  //			array(&$this, '_doAnchors_reference_callback'), $text);
  $this->in_anchor = false;
  return $text;
}