public function parse($text, $plain = false)
 {
     static $fullParser, $plainParser;
     // Create parser if not already created
     if ($plain && !$plainParser || !$plain && !$fullParser) {
         $parser = new Classes\BBCodeParser(null, ['escapeHtml' => true, 'maxNewLines' => 3, 'strictMode' => false, 'xhtmlOutput' => false]);
         // Custom hooks and filters
         $parser->addHook(new Classes\EmoticonHook(['path' => '/', 'extension' => '', 'emoticons' => EmoticonModel::getEmoticons()]));
         $parser->addHook(new Classes\ClickableHook());
         $plain or $parser->addFilter(new Classes\AudioFilter());
         $plain or $parser->addFilter(new Classes\VideoFilter());
         $parser->addFilter(new Classes\UrlFilter());
         // Decoda hooks and filters
         $parser->addFilter(new Decoda\Filter\DefaultFilter());
         $parser->addFilter(new Decoda\Filter\BlockFilter());
         $parser->addFilter(new Decoda\Filter\EmailFilter());
         $plain or $parser->addFilter(new Decoda\Filter\ImageFilter());
         $parser->addFilter(new Decoda\Filter\ListFilter());
         $parser->addFilter(new Decoda\Filter\QuoteFilter());
         if ($plain) {
             $plainParser = $parser;
         } else {
             $fullParser = $parser;
         }
     } else {
         $parser = $plain ? $plainParser : $fullParser;
     }
     $parser->setString($text);
     return $parser->parse();
 }
 public static function getEmoticons()
 {
     static $emoticons;
     if (is_null($emoticons)) {
         $images = Emoticon::with('emoticon')->get();
         $emoticons = [];
         foreach ($images as $image) {
             $notations = array_pluck($image->notation, 'notation');
             $path = $image->emoticon->getPath();
             $emoticons[$path] = $notations;
         }
     }
     return $emoticons;
 }