mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 14:52:40 +01:00
Add Arcanist support for highlighting indent change intraline diffs
Summary: Ref T13161. See D20181. This allows the intraline highlighter to accept new ">" and "<" spans and apply a different style for them. The input pattern is `list<segment>`. Each segment is `pair<wild kind, int byte_length>`, i.e. wrap the next `byte_length` bytes in a span of kind `kind`. Before this change, the possible kinds of segements are `0` (no intraline diff, do not highlight) or `1` (intraline diff, highlight in bright color). D20181 adds `<` (depth decreased) and `>` (depth increased). These are like `1`, but add a different class so the UI can handle them differently. Test Plan: See D20181. Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13161 Differential Revision: https://secure.phabricator.com/D20182
This commit is contained in:
parent
07a208d8fc
commit
9581dd0f52
1 changed files with 18 additions and 3 deletions
|
@ -89,6 +89,9 @@ final class ArcanistDiffUtils extends Phobject {
|
||||||
$highlight_o = '<span class="bright">';
|
$highlight_o = '<span class="bright">';
|
||||||
$highlight_c = '</span>';
|
$highlight_c = '</span>';
|
||||||
|
|
||||||
|
$depth_in = '<span class="depth-in">';
|
||||||
|
$depth_out = '<span class="depth-out">';
|
||||||
|
|
||||||
$is_html = false;
|
$is_html = false;
|
||||||
if ($str instanceof PhutilSafeHTML) {
|
if ($str instanceof PhutilSafeHTML) {
|
||||||
$is_html = true;
|
$is_html = true;
|
||||||
|
@ -107,11 +110,23 @@ final class ArcanistDiffUtils extends Phobject {
|
||||||
$stack = array_shift($intra_stack);
|
$stack = array_shift($intra_stack);
|
||||||
$s = $e;
|
$s = $e;
|
||||||
$e += $stack[1];
|
$e += $stack[1];
|
||||||
} while ($stack[0] == 0);
|
} while ($stack[0] === 0);
|
||||||
|
|
||||||
|
switch ($stack[0]) {
|
||||||
|
case '>':
|
||||||
|
$open_tag = $depth_in;
|
||||||
|
break;
|
||||||
|
case '<':
|
||||||
|
$open_tag = $depth_out;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$open_tag = $highlight_o;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$highlight && !$tag && !$ent && $p == $s) {
|
if (!$highlight && !$tag && !$ent && $p == $s) {
|
||||||
$buf .= $highlight_o;
|
$buf .= $open_tag;
|
||||||
$highlight = true;
|
$highlight = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +154,7 @@ final class ArcanistDiffUtils extends Phobject {
|
||||||
if ($tag && $str[$i] == '>') {
|
if ($tag && $str[$i] == '>') {
|
||||||
$tag = false;
|
$tag = false;
|
||||||
if ($highlight) {
|
if ($highlight) {
|
||||||
$buf .= $highlight_o;
|
$buf .= $open_tag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue