Remove text highlighting from BBCode::convert
- Move code blocks escaping from BBCode::toMarkdown to BBCode::convert - Use "language-" class prefix for expected syntax highlighting
This commit is contained in:
parent
79d36b932b
commit
d6adcb9734
3 changed files with 30 additions and 35 deletions
|
@ -1227,6 +1227,22 @@ class BBCode extends BaseObject
|
||||||
return $return;
|
return $return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Extracting multi-line code blocks before the whitespace processing
|
||||||
|
$codeblocks = [];
|
||||||
|
|
||||||
|
$text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#is",
|
||||||
|
function ($matches) use (&$codeblocks) {
|
||||||
|
$return = $matches[0];
|
||||||
|
if (strpos($matches[2], "\n") !== false) {
|
||||||
|
$return = '#codeblock-' . count($codeblocks) . '#';
|
||||||
|
|
||||||
|
$codeblocks[] = '<pre><code class="language-' . trim($matches[1]) . '">' . trim($matches[2], "\n\r") . '</code></pre>';
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
},
|
||||||
|
$text
|
||||||
|
);
|
||||||
|
|
||||||
// Hide all [noparse] contained bbtags by spacefying them
|
// Hide all [noparse] contained bbtags by spacefying them
|
||||||
// POSSIBLE BUG --> Will the 'preg' functions crash if there's an embedded image?
|
// POSSIBLE BUG --> Will the 'preg' functions crash if there's an embedded image?
|
||||||
|
|
||||||
|
@ -1273,11 +1289,6 @@ class BBCode extends BaseObject
|
||||||
$text = preg_replace("/\[share(.*?)avatar\s?=\s?'.*?'\s?(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism", "\n[share$1$2]$3[/share]", $text);
|
$text = preg_replace("/\[share(.*?)avatar\s?=\s?'.*?'\s?(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism", "\n[share$1$2]$3[/share]", $text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for [code] text here, before the linefeeds are messed with.
|
|
||||||
// The highlighter will unescape and re-escape the content.
|
|
||||||
if (strpos($text, '[code=') !== false) {
|
|
||||||
$text = preg_replace_callback("/\[code=(.*?)\](.*?)\[\/code\]/ism", 'self::textHighlightCallback', $text);
|
|
||||||
}
|
|
||||||
// Convert new line chars to html <br /> tags
|
// Convert new line chars to html <br /> tags
|
||||||
|
|
||||||
// nlbr seems to be hopelessly messed up
|
// nlbr seems to be hopelessly messed up
|
||||||
|
@ -1771,6 +1782,18 @@ class BBCode extends BaseObject
|
||||||
$text = self::interpolateSavedImagesIntoItemBody($text, $saved_image);
|
$text = self::interpolateSavedImagesIntoItemBody($text, $saved_image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restore code blocks
|
||||||
|
$text = preg_replace_callback('/#codeblock-([0-9]+)#/iU',
|
||||||
|
function ($matches) use ($codeblocks) {
|
||||||
|
$return = $matches[0];
|
||||||
|
if (isset($codeblocks[intval($matches[1])])) {
|
||||||
|
$return = $codeblocks[$matches[1]];
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
},
|
||||||
|
$text
|
||||||
|
);
|
||||||
|
|
||||||
// Clean up the HTML by loading and saving the HTML with the DOM.
|
// Clean up the HTML by loading and saving the HTML with the DOM.
|
||||||
// Bad structured html can break a whole page.
|
// Bad structured html can break a whole page.
|
||||||
// For performance reasons do it only with ativated item cache or at export.
|
// For performance reasons do it only with ativated item cache or at export.
|
||||||
|
@ -1905,23 +1928,6 @@ class BBCode extends BaseObject
|
||||||
// Converting images with size parameters to simple images. Markdown doesn't know it.
|
// Converting images with size parameters to simple images. Markdown doesn't know it.
|
||||||
$text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $text);
|
$text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $text);
|
||||||
|
|
||||||
// Extracting multi-line code blocks before the whitespace processing/code highlighter in self::convert()
|
|
||||||
$codeblocks = [];
|
|
||||||
|
|
||||||
$text = preg_replace_callback("#\[code(?:=([^\]]*))?\](.*?)\[\/code\]#is",
|
|
||||||
function ($matches) use (&$codeblocks) {
|
|
||||||
$return = $matches[0];
|
|
||||||
if (strpos($matches[2], "\n") !== false) {
|
|
||||||
$return = '#codeblock-' . count($codeblocks) . '#';
|
|
||||||
|
|
||||||
$prefix = '````' . $matches[1] . PHP_EOL;
|
|
||||||
$codeblocks[] = $prefix . trim($matches[2]) . PHP_EOL . '````';
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
},
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
// Convert it to HTML - don't try oembed
|
// Convert it to HTML - don't try oembed
|
||||||
if ($for_diaspora) {
|
if ($for_diaspora) {
|
||||||
$text = self::convert($text, false, 3);
|
$text = self::convert($text, false, 3);
|
||||||
|
@ -1975,18 +1981,6 @@ class BBCode extends BaseObject
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restore code blocks
|
|
||||||
$text = preg_replace_callback('/#codeblock-([0-9]+)#/iU',
|
|
||||||
function ($matches) use ($codeblocks) {
|
|
||||||
$return = '';
|
|
||||||
if (isset($codeblocks[intval($matches[1])])) {
|
|
||||||
$return = $codeblocks[$matches[1]];
|
|
||||||
}
|
|
||||||
return $return;
|
|
||||||
},
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
Addon::callHooks('bb2diaspora', $text);
|
Addon::callHooks('bb2diaspora', $text);
|
||||||
|
|
||||||
return $text;
|
return $text;
|
||||||
|
|
|
@ -122,7 +122,7 @@ class HTML
|
||||||
// Removing code blocks before the whitespace removal processing below
|
// Removing code blocks before the whitespace removal processing below
|
||||||
$codeblocks = [];
|
$codeblocks = [];
|
||||||
$message = preg_replace_callback(
|
$message = preg_replace_callback(
|
||||||
'#<pre><code(?: class="([^"]*)")?>(.*)</code></pre>#iUs',
|
'#<pre><code(?: class="language-([^"]*)")?>(.*)</code></pre>#iUs',
|
||||||
function ($matches) use (&$codeblocks) {
|
function ($matches) use (&$codeblocks) {
|
||||||
$return = '[codeblock-' . count($codeblocks) . ']';
|
$return = '[codeblock-' . count($codeblocks) . ']';
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ class Markdown extends BaseObject
|
||||||
|
|
||||||
$MarkdownParser = new MarkdownExtra();
|
$MarkdownParser = new MarkdownExtra();
|
||||||
$MarkdownParser->hard_wrap = $hardwrap;
|
$MarkdownParser->hard_wrap = $hardwrap;
|
||||||
|
$MarkdownParser->code_class_prefix = 'language-';
|
||||||
$html = $MarkdownParser->transform($text);
|
$html = $MarkdownParser->transform($text);
|
||||||
|
|
||||||
self::getApp()->save_timestamp($stamp1, "parser");
|
self::getApp()->save_timestamp($stamp1, "parser");
|
||||||
|
|
Loading…
Reference in a new issue