summaryrefslogtreecommitdiff
path: root/app/Filter.php
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@gmail.com>2017-10-17 11:13:27 +0100
committerGreg Roach <fisharebest@gmail.com>2017-10-17 11:13:27 +0100
commitff05914fe94b7e9d9cc9762891f944674dcc5907 (patch)
treed7b67fdcc1e1242c49225ef4ffe12d0e869db9a2 /app/Filter.php
parent22acdb080c4429b40c310f5ecb7f4a84429476cc (diff)
downloadwebtrees-ff05914fe94b7e9d9cc9762891f944674dcc5907.tar.gz
webtrees-ff05914fe94b7e9d9cc9762891f944674dcc5907.tar.bz2
webtrees-ff05914fe94b7e9d9cc9762891f944674dcc5907.zip
Fix: #1382 - use markdown parser to reformat text
Diffstat (limited to 'app/Filter.php')
-rw-r--r--app/Filter.php46
1 files changed, 44 insertions, 2 deletions
diff --git a/app/Filter.php b/app/Filter.php
index e77d54506a..cd1c73afcb 100644
--- a/app/Filter.php
+++ b/app/Filter.php
@@ -15,10 +15,15 @@
*/
namespace Fisharebest\Webtrees;
+use League\CommonMark\Block\Renderer\DocumentRenderer;
+use League\CommonMark\Block\Renderer\ParagraphRenderer;
use League\CommonMark\Converter;
use League\CommonMark\DocParser;
use League\CommonMark\Environment;
use League\CommonMark\HtmlRenderer;
+use League\CommonMark\Inline\Parser\AutolinkParser;
+use League\CommonMark\Inline\Renderer\LinkRenderer;
+use League\CommonMark\Inline\Renderer\TextRenderer;
use Webuni\CommonMark\TableExtension\TableExtension;
/**
@@ -45,7 +50,7 @@ class Filter {
case 'markdown':
return '<div class="markdown" dir="auto">' . self::markdown($text, $WT_TREE) . '</div>';
default:
- return '<div style="white-space: pre-wrap;" dir="auto">' . self::expandUrls($text) . '</div>';
+ return '<div style="white-space: pre-wrap;" dir="auto">' . self::expandUrls($text, $WT_TREE) . '</div>';
}
}
@@ -56,7 +61,7 @@ class Filter {
*
* @return string
*/
- public static function expandUrls($text) {
+ public static function oldexpandUrls($text) {
return preg_replace_callback(
'/' . addcslashes('(?!>)' . self::URL_REGEX . '(?!</a>)', '/') . '/i',
function ($m) {
@@ -67,6 +72,43 @@ class Filter {
}
/**
+ * Format a block of text, expanding URLs and XREFs.
+ *
+ * @param string $text
+ * @param Tree tree
+ *
+ * @return string
+ */
+ public static function expandUrls($text, Tree $tree) {
+ // If it looks like a URL, turn it into a markdown autolink.
+ $text = preg_replace('/' . addcslashes(self::URL_REGEX, '/') . '/', '<$0>', $text);
+
+ // Create a minimal commonmark processor - just add support for autolinks.
+ $environment = new Environment;
+ $environment->mergeConfig([
+ 'renderer' => [
+ 'block_separator' => "\n",
+ 'inner_separator' => "\n",
+ 'soft_break' => "\n",
+ ],
+ 'html_input' => Environment::HTML_INPUT_ESCAPE,
+ 'allow_unsafe_links' => true,
+ ]);
+
+ $environment->mergeConfig(['html_input' => Environment::HTML_INPUT_ESCAPE]);
+ $environment->addBlockRenderer('League\CommonMark\Block\Element\Document', new DocumentRenderer);
+ $environment->addBlockRenderer('League\CommonMark\Block\Element\Paragraph', new ParagraphRenderer);
+ $environment->addInlineRenderer('League\CommonMark\Inline\Element\Text', new TextRenderer);
+ $environment->addInlineRenderer('League\CommonMark\Inline\Element\Link', new LinkRenderer);
+ $environment->addInlineParser(new AutolinkParser);
+ $environment->addInlineParser(new MarkdownXrefParser($tree));
+
+ $converter = new Converter(new DocParser($environment), new HtmlRenderer($environment));
+
+ return $converter->convertToHtml($text);
+ }
+
+ /**
* Format a block of text, using "Markdown".
*
* @param string $text