diff options
Diffstat (limited to 'sphinx/websupport/storage/differ.py')
-rw-r--r-- | sphinx/websupport/storage/differ.py | 76 |
1 files changed, 1 insertions, 75 deletions
diff --git a/sphinx/websupport/storage/differ.py b/sphinx/websupport/storage/differ.py index 2f185d7eb..449d038da 100644 --- a/sphinx/websupport/storage/differ.py +++ b/sphinx/websupport/storage/differ.py @@ -9,78 +9,4 @@ :license: BSD, see LICENSE for details. """ -import re -from difflib import Differ - -from sphinx.util.pycompat import htmlescape - - -class CombinedHtmlDiff(object): - """Create an HTML representation of the differences between two pieces - of text. - """ - highlight_regex = re.compile(r'([\+\-\^]+)') - - def __init__(self, source, proposal): - proposal = htmlescape(proposal) - - differ = Differ() - self.diff = list(differ.compare(source.splitlines(1), - proposal.splitlines(1))) - - def make_text(self): - return '\n'.join(self.diff) - - def make_html(self): - """Return the HTML representation of the differences between - `source` and `proposal`. - - :param source: the original text - :param proposal: the proposed text - """ - html = [] - diff = self.diff[:] - line = diff.pop(0) - next = diff.pop(0) - while True: - html.append(self._handle_line(line, next)) - line = next - try: - next = diff.pop(0) - except IndexError: - html.append(self._handle_line(line)) - break - return ''.join(html).rstrip() - - def _handle_line(self, line, next=None): - """Handle an individual line in a diff.""" - prefix = line[0] - text = line[2:] - - if prefix == ' ': - return text - elif prefix == '?': - return '' - - if next is not None and next[0] == '?': - tag = prefix == '+' and 'ins' or 'del' - text = self._highlight_text(text, next, tag) - css_class = prefix == '+' and 'prop-added' or 'prop-removed' - - return '<span class="%s">%s</span>\n' % (css_class, text.rstrip()) - - def _highlight_text(self, text, next, tag): - """Highlight the specific changes made to a line by adding - <ins> and <del> tags. - """ - next = next[2:] - new_text = [] - start = 0 - for match in self.highlight_regex.finditer(next): - new_text.append(text[start:match.start()]) - new_text.append('<%s>' % tag) - new_text.append(text[match.start():match.end()]) - new_text.append('</%s>' % tag) - start = match.end() - new_text.append(text[start:]) - return ''.join(new_text) +from sphinxcontrib.websupport.storage.differ import CombinedHtmlDiff # NOQA |