From 3e641e2596a5afbbd2aa06be56f1f1193fe6021a Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Thu, 4 Jun 2015 07:49:14 +0200 Subject: [PATCH] Fix bug #19: Tabs ignored in HTML export --- lib/converter/cleanhtml.php | 5 ++++- lib/converter/html.php | 20 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/converter/cleanhtml.php b/lib/converter/cleanhtml.php index 6c5dabf..6ee3431 100644 --- a/lib/converter/cleanhtml.php +++ b/lib/converter/cleanhtml.php @@ -34,7 +34,6 @@ class CleanHtml extends Html 'list-item' => 'li', 'bold' => 'b', 'italic' => 'i', - 'monospace' => 'tt', 'size:large' => 'h3', 'size:huge' => 'h2', @@ -47,6 +46,10 @@ class CleanHtml extends Html 'size:small' => 'small', ); + protected static $styleMap = array( + 'monospace' => 'font-family:monospace; white-space: pre-wrap' + ); + /** * Converts the tomboy note XML into HTML. * Cleans HTML a bit up after it has been generated with the clean tags. diff --git a/lib/converter/html.php b/lib/converter/html.php index a6a92bc..29064e5 100644 --- a/lib/converter/html.php +++ b/lib/converter/html.php @@ -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 .= ''; + } else if (isset(static::$styleMap[$reader->name])) { + $store .= ''; } 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, $reader->name); if (isset(static::$tagMap[$reader->name])) { $store .= 'name] . '>'; } else if (isset(static::$styleClassMap[$reader->name])) { $store .= ''; + } else if (isset(static::$styleMap[$reader->name])) { + $store .= ''; } 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( -- 2.30.2