def _differ_split(row, guide): """Break row into segments using guide line""" line, left_number, right_number, gap = row if left_number and right_number: type = "" elif left_number: type = "remove" elif right_number: type = "add" segments = [] pos = 2 if guide: assert guide.startswith("? ") for m in _re_differ.finditer(guide, pos): if m.start() > pos: segments.append( _item(text=sapi.escape(line[pos:m.start()]), type=None)) segments.append( _item(text=sapi.escape(line[m.start():m.end()]), type="change")) pos = m.end() segments.append(_item(text=sapi.escape(line[pos:]), type=None)) return _item(gap=ezt.boolean(gap), type=type, segments=segments, left_number=left_number, right_number=right_number)
def _differ_split(row, guide): """Break row into segments using guide line""" line, left_number, right_number, gap = row if left_number and right_number: type = "" elif left_number: type = "remove" elif right_number: type = "add" segments = [] pos = 2 if guide: assert guide.startswith("? ") for m in _re_differ.finditer(guide, pos): if m.start() > pos: segments.append(_item(text=sapi.escape(line[pos:m.start()]), type=None)) segments.append(_item(text=sapi.escape(line[m.start():m.end()]), type="change")) pos = m.end() segments.append(_item(text=sapi.escape(line[pos:]), type=None)) return _item(gap=ezt.boolean(gap), type=type, segments=segments, left_number=left_number, right_number=right_number)
def _mdiff_split(flag, line_number_text): """Break up row from mdiff output into segments""" line_number, text = line_number_text segments = [] pos = 0 while True: m = _re_mdiff.search(text, pos) if not m: segments.append(_item(text=sapi.escape(text[pos:]), type=None)) break if m.start() > pos: segments.append( _item(text=sapi.escape(text[pos:m.start()]), type=None)) if m.group(1) == "+": segments.append(_item(text=sapi.escape(m.group(2)), type="add")) elif m.group(1) == "-": segments.append(_item(text=sapi.escape(m.group(2)), type="remove")) elif m.group(1) == "^": segments.append(_item(text=sapi.escape(m.group(2)), type="change")) pos = m.end() return _item(segments=segments, line_number=line_number)
def __getitem__(self, idx): item = self.annotation.__getitem__(idx) diff_url = None if item.prev_rev: diff_url = '%sr1=%s&r2=%s' % (self.diff_url, item.prev_rev, item.rev) thisline = link_includes(sapi.escape(item.text), self.repos, self.path_parts, self.include_url) return _item(text=thisline, line_number=item.line_number, rev=item.rev, prev_rev=item.prev_rev, diff_url=diff_url, date=item.date, author=item.author)
to_item = _mdiff_split(flag, todata) yield _item(gap=ezt.boolean(gap), columns=(from_item, to_item)) gap = False _re_mdiff = re.compile("\0([+-^])(.*?)\1") def _mdiff_split(flag, (line_number, text)): """Break up row from mdiff output into segments""" segments = [] pos = 0 while True: m = _re_mdiff.search(text, pos) if not m: segments.append(_item(text=sapi.escape(text[pos:]), type=None)) break if m.start() > pos: segments.append( _item(text=sapi.escape(text[pos:m.start()]), type=None)) if m.group(1) == "+": segments.append(_item(text=sapi.escape(m.group(2)), type="add")) elif m.group(1) == "-": segments.append(_item(text=sapi.escape(m.group(2)), type="remove")) elif m.group(1) == "^": segments.append(_item(text=sapi.escape(m.group(2)), type="change")) pos = m.end()
def htmlify(html): # if kconv module exists, convert Japanese character code to utf-8 if multibyte == 1: html = toutf8(html) html = sapi.escape(html) return html
had_changes = 1 yield _item(gap=ezt.boolean(gap), columns=(from_item, to_item), type="intraline") gap = False if not had_changes: yield _item(type=_RCSDIFF_NO_CHANGES) _re_mdiff = re.compile("\0([+-^])(.*?)\1") def _mdiff_split(flag, (line_number, text)): """Break up row from mdiff output into segments""" segments = [] pos = 0 while True: m = _re_mdiff.search(text, pos) if not m: segments.append(_item(text=sapi.escape(text[pos:]), type=None)) break if m.start() > pos: segments.append(_item(text=sapi.escape(text[pos:m.start()]), type=None)) if m.group(1) == "+": segments.append(_item(text=sapi.escape(m.group(2)), type="add")) elif m.group(1) == "-": segments.append(_item(text=sapi.escape(m.group(2)), type="remove")) elif m.group(1) == "^": segments.append(_item(text=sapi.escape(m.group(2)), type="change")) pos = m.end() return _item(segments=segments, line_number=line_number)