private function _getHtml($content, $trigger, tubepress_spi_shortcode_ShortcodeParser $parser)
 {
     $context = tubepress_impl_patterns_sl_ServiceLocator::getExecutionContext();
     $gallery = tubepress_impl_patterns_sl_ServiceLocator::getShortcodeHtmlGenerator();
     /* Parse each shortcode one at a time */
     while ($parser->somethingToParse($content, $trigger)) {
         /* Get the HTML for this particular shortcode. Could be a single video or a gallery. */
         try {
             $generatedHtml = $gallery->getHtmlForShortcode($content);
         } catch (Exception $e) {
             $generatedHtml = $this->_dispatchErrorAndGetMessage($e);
         }
         /* remove any leading/trailing <p> tags from the content */
         $pattern = '/(<[P|p]>\\s*)(' . preg_quote($context->getActualShortcodeUsed(), '/') . ')(\\s*<\\/[P|p]>)/';
         $content = preg_replace($pattern, '${2}', $content);
         /* replace the shortcode with our new content */
         $currentShortcode = $context->getActualShortcodeUsed();
         $content = tubepress_impl_util_StringUtils::replaceFirst($currentShortcode, $generatedHtml, $content);
         $content = tubepress_impl_util_StringUtils::removeEmptyLines($content);
         /* reset the context for the next shortcode */
         $context->reset();
     }
     return $content;
 }