public static function highlight($raw_body)
 {
     $body = sfMarkdown::doConvert($raw_body);
     $matches = array();
     $langs = array();
     preg_match_all("/<pre><code>\\[(\\w*)\\](\\r?\\n)+(.+)(\\r?\\n)+<\\/code><\\/pre>/isU", $body, $matches, PREG_SET_ORDER);
     if (sizeof($matches) > 0) {
         $service = new SnippetServiceClient();
         $cnt = 1;
         foreach ($matches as $match) {
             sfLogger::getInstance()->info("From myUtils: " . $match[3]);
             $languageLower = $match[1];
             $languageUpper = strtoupper($match[1]);
             sfLogger::getInstance()->info("myUtils languages: {$languageLower} {$languageUpper}" . sizeof(self::$languages));
             if (in_array($languageUpper, self::$languages)) {
                 $highlighted = $service->highlight($languageUpper, htmlspecialchars_decode($match[3]));
                 $highlighted['snippet'] = "<div class=\"code-wrapper\">{$highlighted['snippet']}</div>";
                 $body = str_replace($match[0], $highlighted['snippet'], $body, $cnt);
                 $langs[$languageLower] = $langs[$languageLower] ? $langs[$languageLower] + 1 : 1;
             } else {
                 sfLogger::getInstance()->info("myUtils : {$languageLower} is not supported.");
                 $langs[$languageLower] = $langs[$languageLower] ? $langs[$languageLower] + 1 : 1;
                 $body = str_replace($match[0], "<div class=\"code-wrapper\"><pre><code>{$match[3]}</code></pre></div>", $body, $cnt);
             }
         }
     }
     return array('body' => $body, 'langs' => $langs);
 }
Esempio n. 2
0
 public static function doConvert($content)
 {
     if (class_exists('sfMarkdown')) {
         return sfMarkdown::doConvert($content);
     } else {
         return $content;
     }
 }
 public function parse()
 {
     $html = sfMarkdown::doConvert($this->data);
     if (!$html) {
         return;
     }
     $html = str_replace(array('</pre></code>', '<code>', '</code>', '<br>'), array('</pre>', '', '', '<br />'), preg_replace('/<pre><code>#(ruby|asp|js|php|x?html|css)/ie', 'strtolower("<pre class=\\"$1\\">")', $html));
     $this->xml = simplexml_load_string('<div>' . $html . '</div>');
     $stack = array();
     $section = null;
     foreach ($this->xml as $node) {
         $content = (string) $node->asXml();
         switch ($tag = strtolower($node->getName())) {
             case 'h1':
                 $this->plugin['name'] = strip_tags($content);
             case 'h2':
                 if ($section) {
                     $img = null;
                     if ($section['tag'] == 'h1') {
                         $img = $section['node']->xpath('//img');
                         if (!empty($img) && $img[0]) {
                             $this->plugin['screenshot'] = (string) $img[0]->attributes()->src;
                             $img = $img[0]->asXml();
                         }
                     }
                     if (!empty($img)) {
                         foreach ($stack as $key => $value) {
                             $stack[$key] = str_replace($img, '', $value);
                         }
                     }
                     $this->endSection($section, $stack);
                     $stack = array();
                 }
                 $section = array('tag' => $tag, 'content' => $content, 'node' => $node);
                 break;
             default:
                 $stack[] = $content;
                 break;
         }
     }
     $this->endSection($section, $stack);
     foreach ($this->sections as $name => $content) {
         if (!in_array($name, $this->options['defaultSections'])) {
             $this->arbitrarySections[$name] = $content;
         }
     }
     $images = $this->xml->xpath('//img');
     if (!empty($images)) {
         foreach ($images as $img) {
             if ($this->getScreenshot() == $img->attributes()->src) {
                 continue;
             }
             $this->images[(string) $img->attributes()->src] = (string) $img->attributes()->alt;
         }
     }
 }
Esempio n. 4
0
/**
 * Convert Markdown text to HTML
 *
 * Right now, this is simply a bridge to sfMarkdown class static functions.
 * I have some interesting ideas for the future.
 *
 * @param   string  $text
 * @return  string
 * @see     sfMarkdown::doConvert()
 */
function convert_markdown_text($text)
{
    return sfMarkdown::doConvert($text);
}
 function getContent()
 {
     return sfMarkdown::doConvert($this->getBody());
 }
 public function getContent()
 {
     return sfMarkdown::doConvert($this->getDescription());
 }