changeset 1732:cf11cfc87ef9

xml_tools, plugin XEP-0071, XEP-0277: add method expandNewLinesToXHTML: - \n in XHTML content should not be converted to <br /> by the frontend - save it directly in the Atom payload for better compatibility with other clients
author souliane <souliane@mailoo.org>
date Thu, 10 Dec 2015 14:00:21 +0100
parents 58ecc0e2e6fc
children 3770d13776e8
files src/plugins/plugin_xep_0071.py src/plugins/plugin_xep_0277.py src/tools/xml_tools.py
diffstat 3 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0071.py	Thu Dec 10 10:44:04 2015 +0100
+++ b/src/plugins/plugin_xep_0071.py	Thu Dec 10 14:00:21 2015 +0100
@@ -22,6 +22,7 @@
 from sat.core.log import getLogger
 log = getLogger(__name__)
 
+from sat.tools import xml_tools
 from wokkel import disco, iwokkel
 from zope.interface import implements
 # from lxml import etree
@@ -118,6 +119,7 @@
                 raise exceptions.DataError(_("Can't have xhtml and rich content at the same time"))
         if xhtml:
             d = self.synt_plg.clean_xhtml(xhtml)
+            d.addCallback(xml_tools.expandNewLinesToXHTML)
         d.addCallback(syntax_converted)
         return d
 
--- a/src/plugins/plugin_xep_0277.py	Thu Dec 10 10:44:04 2015 +0100
+++ b/src/plugins/plugin_xep_0277.py	Thu Dec 10 14:00:21 2015 +0100
@@ -180,6 +180,7 @@
                 key = check_conflict(u'{}_xhtml'.format(elem.name))
                 data = data_elt.toXml()
                 microblog_data[key] = yield self.host.plugins["TEXT-SYNTAXES"].clean_xhtml(data)
+                microblog_data[key] = xml_tools.expandNewLinesToXHTML(microblog_data[key])
             else:
                 key = check_conflict(elem.name)
                 microblog_data[key] = unicode(elem)
@@ -368,6 +369,7 @@
                                 raise failure.Failure(exceptions.DataError(_("Can't have xhtml and rich content at the same time")))
                         else:  # clean the XHTML input
                             converted = yield synt.clean_xhtml(data[attr])
+                        converted = xml_tools.expandNewLinesToXHTML(converted)
 
                         xml_content = u'<div xmlns="{ns}">{converted}</div>'.format(
                                         ns=NS_XHTML,
--- a/src/tools/xml_tools.py	Thu Dec 10 10:44:04 2015 +0100
+++ b/src/tools/xml_tools.py	Thu Dec 10 14:00:21 2015 +0100
@@ -29,7 +29,7 @@
 from twisted.internet import defer
 from sat.core import exceptions
 from collections import OrderedDict
-
+import re
 
 """This library help manage XML used in SàT (parameters, registration, etc)"""
 
@@ -1351,3 +1351,13 @@
         tmp.addRawXml(raw_xml)
         parser.parse(tmp.toXml().encode('utf-8'))
         return self.result.firstChildElement()
+
+
+def expandNewLinesToXHTML(text):
+    """If not present yet, add a <br /> before all \n occurences.
+
+    @param text(unicode)
+    @return unicode
+    """
+    # if present, replace <br> (HTML), <br > and <br/> at end of line with <br /> (XHTML)
+    return re.sub(r"<br[ ]?/?>\n", "\n", text).replace("\n", "<br />\n")