Browse Source

Implement escaping a bit more nicely.

pull/24/head
Ben Kurtovic 11 years ago
parent
commit
e3d150027b
1 changed files with 16 additions and 14 deletions
  1. +16
    -14
      toolserver/copyvios/highlighter.py

+ 16
- 14
toolserver/copyvios/highlighter.py View File

@@ -34,41 +34,43 @@ def highlight_delta(context, chain, delta):
return u"<br /><br />".join(processed)

def _highlight_word(word, before, after, is_first, is_last):
word = escape(word)
if before and after:
# Word is in the middle of a highlighted block, so don't change
# anything unless this is the first word (force block to start) or
# the last word (force block to end):
res = word
# anything unless this is the first word (force block to start) or the
# last word (force block to end):
res = escape(word)
if is_first:
res = u'<span class="cv-hl">' + res
if is_last:
res += u'</span>'
elif before:
# Word is the last in a highlighted block, so fade it out and then
# end the block; force open a block before the word if this is the
# first word:
# Word is the last in a highlighted block, so fade it out and then end
# the block; force open a block before the word if this is the first
# word:
res = _fade_word(word, u"out") + u"</span>"
if is_first:
res = u'<span class="cv-hl">' + res
elif after:
# Word is the first in a highlighted block, so start the block and
# then fade it in; force close the block after the word if this is
# the last word:
# Word is the first in a highlighted block, so start the block and then
# fade it in; force close the block after the word if this is the last
# word:
res = u'<span class="cv-hl">' + _fade_word(word, u"in")
if is_last:
res += u"</span>"
else:
# Word is completely outside of a highlighted block, so do nothing:
res = word
res = escape(word)
return res

def _fade_word(word, dir):
if len(word) <= 4:
return u'<span class="cv-hl-{0}">{1}</span>'.format(dir, word)
return u'<span class="cv-hl-{0}">{1}</span>'.format(dir, escape(word))
if dir == u"out":
return u'{0}<span class="cv-hl-out">{1}</span>'.format(word[:-4], word[-4:])
return u'<span class="cv-hl-in">{0}</span>{1}'.format(word[:4], word[4:])
base = u'{0}<span class="cv-hl-out">{1}</span>'
return base.format(escape(word[:-4]), escape(word[-4:]))
else:
base = u'<span class="cv-hl-in">{0}</span>{1}'
return base.format(escape(word[:4]), escape(word[4:]))

def _strip_word(word):
return sub("[^\w\s-]", "", word.lower(), flags=UNICODE)

Loading…
Cancel
Save