from AccessControl.class_init import InitializeClass
from Products.CMFDiffTool.libs import htmldiff
from Products.CMFDiffTool.TextDiff import TextDiff
from Products.CMFDiffTool.utils import html_safe


# Give it a dumb name so it doesn't conflict with all the other html diffs
# around.  This uses Ian Bicking's very nice htmldiff.py from Web Ware for
# Python.
class CMFDTHtmlDiff(TextDiff):
    """Text difference"""

    meta_type = "HTML Diff"

    def inline_diff(self):
        """Return a specialized diff for HTML"""
        a = "\n".join(self._parseField(self.oldValue, filename=self.oldFilename))
        b = "\n".join(self._parseField(self.newValue, filename=self.newFilename))
        return htmldiff.htmldiff(html_safe(a), html_safe(b))

    def _parseField(self, value, filename=None):
        """Use the field's raw value if available."""
        if value is None:
            value = ""
        else:
            value = getattr(value, "raw", value)
        return TextDiff._parseField(self, value, filename)


InitializeClass(CMFDTHtmlDiff)
