X-Git-Url: https://git.cweiske.de/grauphel.git/blobdiff_plain/8ee6bfe97633d31c6b89cebbc434837eca04d6dd..1a5b0cd1539c149d18db4e40f16c56654cace898:/lib/converter/html.php diff --git a/lib/converter/html.php b/lib/converter/html.php index 1723a5b..11cf105 100644 --- a/lib/converter/html.php +++ b/lib/converter/html.php @@ -11,7 +11,7 @@ * @license http://www.gnu.org/licenses/agpl.html GNU AGPL v3 * @link http://cweiske.de/grauphel.htm */ -namespace OCA\Grauphel\Lib\Converter; +namespace OCA\Grauphel\Converter; use \XMLReader; /** @@ -30,14 +30,13 @@ use \XMLReader; * @version Release: @package_version@ * @link http://cweiske.de/grauphel.htm */ -class Html +class Html extends Base { protected static $tagMap = array( 'list' => 'ul', 'list-item' => 'li', 'bold' => 'b', 'italic' => 'i', - 'monospace' => 'tt', ); protected static $styleClassMap = array( @@ -48,6 +47,10 @@ class Html 'size:huge' => 'huge', ); + protected static $styleMap = array( + 'monospace' => 'font-family:monospace; white-space: pre-wrap' + ); + public $internalLinkHandler; @@ -80,17 +83,23 @@ class Html ); $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 } break; case XMLReader::END_ELEMENT: + array_shift($nesting); 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,10 +130,14 @@ class Html 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( + throw new Exception( 'Unsupported XML node type: ' . $reader->nodeType ); } @@ -159,39 +175,5 @@ class Html { return $linkUrl . '.htm'; } - - /** - * Re-arranges the XML of formatted links to that clean link tags can - * be generated. - * - * Tomboy 1.15.2 allows link formatting, and the resulting XML is a - * mess of multiple(!) link tags that are within or around other formatting - * tags. - * - * This method tries to re-arrange the links so that only a single link tag - * appears with all the formatting inside. - * - * @param string $xmlContent Tomboy note content - * - * @return string XML content, with re-arranged link tags. - */ - protected function fixNastyLinks($xmlContent) - { - preg_match_all( - '#(?:<.*>)?.+.+#U', - $xmlContent, - $matches - ); - - foreach ($matches[0] as $nastyLink) { - $cleaner = str_replace('', '', $nastyLink); - $cleaner = preg_replace('#<([a-z]+)><(link:internal)>#U', '<\2><\1>', $cleaner); - $cleaner = preg_replace('##U', '', $cleaner); - $cleaner = str_replace('', '', $cleaner); - $xmlContent = str_replace($nastyLink, $cleaner, $xmlContent); - } - - return $xmlContent; - } } ?>