aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/bbcode.php21
-rw-r--r--include/text.php22
2 files changed, 43 insertions, 0 deletions
diff --git a/include/bbcode.php b/include/bbcode.php
index bb9144b1d..84f0f3dda 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -4,6 +4,8 @@
* @brief BBCode related functions for parsing, etc.
*/
+use Zotlabs\Lib\SvgSanitizer;
+
require_once('include/oembed.php');
require_once('include/event.php');
require_once('include/zot.php');
@@ -267,6 +269,22 @@ function bb_parse_app($match) {
return Zotlabs\Lib\Apps::app_render($app);
}
+function bb_svg($match) {
+
+ $params = str_replace(['<br>', '&quot;'], [ '', '"'],$match[1]);
+ $Text = str_replace([ '[',']' ], [ '<','>' ], $match[2]);
+
+ $output = '<svg' . (($params) ? $params : ' width="100%" height="480" ') . '>' . str_replace(['<br>', '&quot;', '&nbsp;'], [ '', '"', ' '],$Text) . '</svg>';
+
+ $purify = new SvgSanitizer();
+ $purify->loadXML($output);
+ $purify->sanitize();
+ $output = $purify->saveSVG();
+ $output = preg_replace("/\<\?xml(.*?)\?\>/",'',$output);
+ return $output;
+}
+
+
function bb_parse_element($match) {
$j = json_decode(base64url_decode($match[1]),true);
@@ -1289,6 +1307,9 @@ function bbcode($Text, $options = []) {
$Text = preg_replace_callback("/\[zaudio\](.*?\.(ogg|ogv|oga|ogm|webm|mp4|mp3|opus|m4a))\[\/zaudio\]/ism", 'tryzrlaudio', $Text);
}
+ // SVG stuff
+ $Text = preg_replace_callback("/\[svg(.*?)\](.*?)\[\/svg\]/ism", 'bb_svg', $Text);
+
// Try to Oembed
if ($tryoembed) {
if (strpos($Text,'[/video]') !== false) {
diff --git a/include/text.php b/include/text.php
index 54ad9ec7a..2496ca934 100644
--- a/include/text.php
+++ b/include/text.php
@@ -9,6 +9,8 @@ use Michelf\MarkdownExtra;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
+use Zotlabs\Lib\SvgSanitizer;
+
require_once("include/bbcode.php");
// random string, there are 86 characters max in text mode, 128 for hex
@@ -3648,3 +3650,23 @@ function new_uuid() {
return $hash;
}
+
+
+function svg2bb($s) {
+
+ $s = preg_replace("/\<text (.*?)\>(.*?)\<(.*?)\<\/text\>/", '<text $1>$2&lt;$3</text>', $s);
+ $s = preg_replace("/\<text (.*?)\>(.*?)\>(.*?)\<\/text\>/", '<text $1>$2&gt;$3</text>', $s);
+ $s = preg_replace("/\<text (.*?)\>(.*?)\[(.*?)\<\/text\>/", '<text $1>$2&#91;$3</text>', $s);
+ $s = preg_replace("/\<text (.*?)\>(.*?)\](.*?)\<\/text\>/", '<text $1>$2&#93;$3</text>', $s);
+ $s = utf8_encode($s);
+ $purify = new SvgSanitizer();
+ if ($purify->loadXML($s)) {
+ $purify->sanitize();
+ $output = $purify->saveSVG();
+ $output = preg_replace("/\<\?xml(.*?)\>/",'',$output);
+ $output = preg_replace("/\<\!\-\-(.*?)\-\-\>/",'',$output);
+ $output = str_replace(['<','>'],['[',']'],$output);
+ return $output;
+ }
+ return EMPTY_STR;
+}