Fix #28: array_shift() E_NOTICE in owncloud.log
[grauphel.git] / lib / converter / html.php
index a6a92bc6e9693f8c74ceb60aa3bffcd688248530..11cf105ceb2a01c1928ff9e9f4137c0bc309688d 100644 (file)
@@ -37,7 +37,6 @@ class Html extends Base
         'list-item' => 'li',
         'bold'      => 'b',
         'italic'    => 'i',
-        'monospace' => 'tt',
     );
 
     protected static $styleClassMap = array(
@@ -48,6 +47,10 @@ class Html extends Base
         'size:huge'  => 'huge',
     );
 
+    protected static $styleMap = array(
+        'monospace' => 'font-family:monospace; white-space: pre-wrap'
+    );
+
     public $internalLinkHandler;
 
 
@@ -80,17 +83,23 @@ class Html extends Base
         );
 
         $withinLink = false;
+        $nesting = array();
         $store = &$html;
         while ($reader->read()) {
             switch ($reader->nodeType) {
             case XMLReader::ELEMENT:
                 //echo $reader->name . "\n";
+                array_unshift($nesting, $reader->name);
                 if (isset(static::$tagMap[$reader->name])) {
                     $store .= '<' . static::$tagMap[$reader->name] . '>';
                 } else if (isset(static::$styleClassMap[$reader->name])) {
                     $store .= '<span class="'
                         . static::$styleClassMap[$reader->name]
                         . '">';
+                } else if (isset(static::$styleMap[$reader->name])) {
+                    $store .= '<span style="'
+                        . static::$styleMap[$reader->name]
+                        . '">';
                 } else if (substr($reader->name, 0, 5) == 'link:') {
                     $withinLink = true;
                     $linkText    = '';
@@ -98,10 +107,13 @@ class Html extends Base
                 }
                 break;
             case XMLReader::END_ELEMENT:
+                array_shift($nesting);
                 if (isset(static::$tagMap[$reader->name])) {
                     $store .= '</' . static::$tagMap[$reader->name] . '>';
                 } else if (isset(static::$styleClassMap[$reader->name])) {
                     $store .= '</span>';
+                } else if (isset(static::$styleMap[$reader->name])) {
+                    $store .= '</span>';
                 } else if (substr($reader->name, 0, 5) == 'link:') {
                     $withinLink = false;
                     $store      = &$html;
@@ -118,7 +130,11 @@ class Html extends Base
                 break;
             case XMLReader::TEXT:
             case XMLReader::SIGNIFICANT_WHITESPACE:
-                $store .= nl2br(htmlspecialchars($reader->value));
+                $text = htmlspecialchars($reader->value);
+                if ($nesting[0] != 'monospace') {
+                    $text = nl2br($text);
+                }
+                $store .= $text;
                 break;
             default:
                 throw new Exception(