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 .= '' . 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 = 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('#(link:internal)>([a-z]+)>#U', '\2>\1>', $cleaner);
- $cleaner = str_replace('', '', $cleaner);
- $xmlContent = str_replace($nastyLink, $cleaner, $xmlContent);
- }
-
- return $xmlContent;
- }
}
?>