* @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;
/**
* @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(
'size:huge' => 'huge',
);
+ protected static $styleMap = array(
+ 'monospace' => 'font-family:monospace; white-space: pre-wrap'
+ );
+
public $internalLinkHandler;
);
$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 = '';
}
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;
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
);
}
{
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(
- '#(?:<.*>)?<link:internal>.+</link:internal><link:internal>.+</link:internal>#U',
- $xmlContent,
- $matches
- );
-
- foreach ($matches[0] as $nastyLink) {
- $cleaner = str_replace('</link:internal><link:internal>', '', $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('</link:internal><link:internal>', '', $cleaner);
- $xmlContent = str_replace($nastyLink, $cleaner, $xmlContent);
- }
-
- return $xmlContent;
- }
}
?>