/**
  * Initialize extension
  *
  * @param  \Twig_ExtensionInterface $extension The Twig extension to
  *                                             initialize.
  */
 protected function initExtension(\Twig_ExtensionInterface $extension)
 {
     parent::initExtension($extension);
     // shortcodes
     if ($extension instanceof ExtensionInterface) {
         // Shortcodes (block and inline)
         foreach ($extension->getShortcodes() as $name => $shortcode) {
             if ($name instanceof GenericShortcode) {
                 $shortcode = $name;
                 $name = $shortcode->getName();
             } elseif ($shortcode instanceof GenericShortcode) {
                 $name = $shortcode->getName();
             }
             $this->shortcodes[$name] = $shortcode;
         }
         // Shortcode filters
         foreach ($extension->getShortcodeFilters() as $name => $shortcodeFilter) {
             if ($name instanceof GenericShortcodeFilter) {
                 $shortcodeFilter = [$name];
                 $name = $shortcodeFilter->getName();
             } elseif ($shortcodeFilter instanceof GenericShortcodeFilter) {
                 $name = $shortcodeFilter->getName();
             } else {
                 // List of shortcode filters to be sorted
                 usort($shortcodeFilter, function ($a, $b) {
                     $priority = 0;
                     if ($a->getPriority() > $b->getPriority()) {
                         $priority = 1;
                     } elseif ($a->getPriority() < $b->getPriority()) {
                         $priority = -1;
                     }
                     // Higher priorities are executed first
                     return $priority;
                 });
                 // Reverse to match registering order of shortcode filters
                 $shortcodeFilter = array_reverse($shortcodeFilter);
             }
             $this->shortcodeFilters[$name] = $shortcodeFilter;
         }
     }
 }