Esempio n. 1
0
 /**
  * Convert a piece of text from "wiki" markup to XHTML markup for display
  * @param string $body Text to convert
  * @return string XHTML markup
  */
 static function convert($body)
 {
     // Ensure only plain text
     $body = check_plain($body);
     // Any parsing to do?  Quick check
     if (strpos($body, '[[') !== false) {
         $body = sscText::_parse_tags($body);
     }
     // Headings
     for ($i = 4; $i > 2; $i--) {
         $h = str_repeat('=', $i - 1);
         $body = preg_replace("/{$h}(.+){$h}/", "\n<h{$i}>\\1</h{$i}>\n", $body);
     }
     // Prepare to parse paragraphs
     if (strpos($body, "\r") !== false) {
         // Are \r's
         if (strpos($body, "\n") !== false) {
             // \n's too
             // Assume windows \r\n format
             $body = str_replace("\r", '', $body);
         } else {
             // No \n's
             $body = str_replace("\r", "\n", $body);
         }
     }
     // Parsing of paragraphs (normal and specialised), lists, etc
     $bulk = explode("\n", $body);
     $inpara = false;
     $body = '';
     $count = count($bulk);
     // Loop through each line
     for ($i = 0; $i < $count; $i++) {
         // Check first character
         if (empty($bulk[$i])) {
             if ($inpara) {
                 $body .= '</p><p>';
             } else {
                 $body .= '<p>';
                 $inpara = true;
             }
             continue;
         }
         switch (substr($bulk[$i], 0, 1)) {
             case ' ':
                 // Space - denotes pre-formatted stuff for code
                 if ($inpara) {
                     $body .= '</p>';
                     $inpara = false;
                 }
                 $body .= '<pre>';
                 do {
                     $body .= $bulk[$i] . '\\n';
                     $i++;
                 } while (isset($bulk[$i][0]) && $bulk[$i][0] == ' ');
                 $body .= '</pre>';
                 $i--;
                 break;
             case '*':
                 // Asterisk - denotes bulleted list
                 if ($inpara) {
                     $body .= '</p>';
                     $inpara = false;
                 }
                 $body .= sscText::_do_list($bulk, $i);
                 break;
             default:
                 if (strpos($bulk[$i], '<h') !== false) {
                     if ($inpara) {
                         $inpara = false;
                         $body .= '</p>';
                     }
                 } else {
                     if (!$inpara) {
                         $body .= '<p>';
                         $inpara = true;
                     }
                 }
                 $body .= $bulk[$i];
         }
     }
     if ($inpara) {
         $body .= '</p>';
     }
     while (strpos($body, '<p></p>') !== false) {
         $body = str_replace('<p></p>', '', $body);
     }
     return $body;
 }