diff --git a/Parsedown.php b/Parsedown.php index 7fb6525..191d80d 100755 --- a/Parsedown.php +++ b/Parsedown.php @@ -51,7 +51,6 @@ class Parsedown # private $reference_map = array(); - private $escape_sequence_map = array(); # # Public Methods @@ -66,25 +65,6 @@ class Parsedown # replaces tabs with spaces $text = str_replace("\t", ' ', $text); - # encodes escape sequences - - if (strpos($text, '\\') !== FALSE) - { - $escape_sequences = array('\\\\', '\`', '\*', '\_', '\{', '\}', '\[', '\]', '\(', '\)', '\>', '\#', '\+', '\-', '\.', '\!'); - - foreach ($escape_sequences as $index => $escape_sequence) - { - if (strpos($text, $escape_sequence) !== FALSE) - { - $code = "\x1A".'\\'.$index.';'; - - $text = str_replace($escape_sequence, $code, $text); - - $this->escape_sequence_map[$code] = $escape_sequence; - } - } - } - # ~ $text = trim($text, "\n"); @@ -93,15 +73,6 @@ class Parsedown $text = $this->parse_block_elements($lines); - # decodes escape sequences - - foreach ($this->escape_sequence_map as $code => $escape_sequence) - { - $text = str_replace($code, $escape_sequence[1], $text); - } - - # ~ - $text = rtrim($text, "\n"); return $text; @@ -612,8 +583,6 @@ class Parsedown $text = htmlspecialchars($element['text'], ENT_NOQUOTES, 'UTF-8'); - strpos($text, "\x1A\\") !== FALSE and $text = strtr($text, $this->escape_sequence_map); - $markup .= isset($element['language']) ? '
'.$text.'
'
: ''.$text.'
';
@@ -673,9 +642,9 @@ class Parsedown
return $markup;
}
- private function parse_span_elements($text, $markers = array('![', '&', '*', '<', '[', '_', '`', 'http', '~~'))
+ private function parse_span_elements($text, $markers = array('![', '&', '*', '<', '[', '\\', '_', '`', 'http', '~~'))
{
- if (isset($text[2]) === false or $markers === array())
+ if (isset($text[1]) === false or $markers === array())
{
return $text;
}
@@ -711,7 +680,7 @@ class Parsedown
# ~
- if ($closest_marker === null or isset($text[$closest_marker_position + 2]) === false)
+ if ($closest_marker === null or isset($text[$closest_marker_position + 1]) === false)
{
$markup .= $text;
@@ -921,6 +890,23 @@ class Parsedown
break;
+ case '\\':
+
+ if (in_array($text[1], $this->special_characters))
+ {
+ $markup .= $text[1];
+
+ $offset = 2;
+ }
+ else
+ {
+ $markup .= '\\';
+
+ $offset = 1;
+ }
+
+ break;
+
case '`':
if (preg_match('/^`(.+?)`/', $text, $matches))
@@ -928,11 +914,6 @@ class Parsedown
$element_text = $matches[1];
$element_text = htmlspecialchars($element_text, ENT_NOQUOTES, 'UTF-8');
- if ($this->escape_sequence_map and strpos($element_text, "\x1A") !== false)
- {
- $element_text = strtr($element_text, $this->escape_sequence_map);
- }
-
$markup .= ''.$element_text.'
';
$offset = strlen($matches[0]);
@@ -1011,6 +992,8 @@ class Parsedown
'span', 'strong', 'sub', 'sup', 'textarea', 'tt', 'var',
);
+ private $special_characters = array('\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!');
+
# ~
private $strong_regex = array(