commit - 5e2413799664c1d48a0e266fffaa1b320b348c29
commit + fe8af0d6c0a2ba7f1c50f0b88cd7e13d784d2e23
blob - eb04709b9c9adb66907177f82e036589906fcfb0
blob + 20767052a7fd8ba51f93706796155ffdbfb04a82
--- include/diff/diff_output.h
+++ include/diff/diff_output.h
FILE *dest, const struct diff_input_info *info,
const struct diff_result *result,
unsigned int context_lines);
+int diff_chunk_get_left_start(const struct diff_chunk *c,
+ const struct diff_result *r,
+ int context_lines);
+int diff_chunk_get_left_end(const struct diff_chunk *c,
+ const struct diff_result *r,
+ int context_lines);
+int diff_chunk_get_right_start(const struct diff_chunk *c,
+ const struct diff_result *r,
+ int context_lines);
+int diff_chunk_get_right_end(const struct diff_chunk *c,
+ const struct diff_result *r,
+ int context_lines);
void diff_chunk_context_get(struct diff_chunk_context *cc,
const struct diff_result *r,
int chunk_idx, int context_lines);
blob - a9a176b4261f749224df4eebf1c0bea6f37b2026
blob + fc5b69b7af9741fe8308060d890d82c1eeb4c8c4
--- lib/diff_output_unidiff.c
+++ lib/diff_output_unidiff.c
return diff_range_empty(&cc->chunk);
}
+int
+diff_chunk_get_left_start(const struct diff_chunk *c,
+ const struct diff_result *r, int context_lines)
+{
+ int left_start = diff_atom_root_idx(&r->left, c->left_start);
+ return MAX(0, left_start - context_lines);
+}
+
+int
+diff_chunk_get_left_end(const struct diff_chunk *c,
+ const struct diff_result *r, int context_lines)
+{
+ int left_start = diff_chunk_get_left_start(c, r, 0);
+ return MIN(r->left.atoms.len,
+ left_start + c->left_count + context_lines);
+}
+
+int
+diff_chunk_get_right_start(const struct diff_chunk *c,
+ const struct diff_result *r, int context_lines)
+{
+ int right_start = diff_atom_root_idx(&r->right, c->right_start);
+ return MAX(0, right_start - context_lines);
+}
+
+int
+diff_chunk_get_right_end(const struct diff_chunk *c,
+ const struct diff_result *r, int context_lines)
+{
+ int right_start = diff_chunk_get_right_start(c, r, 0);
+ return MIN(r->right.atoms.len,
+ right_start + c->right_count + context_lines);
+}
+
void
diff_chunk_context_get(struct diff_chunk_context *cc, const struct diff_result *r,
int chunk_idx, int context_lines)
{
const struct diff_chunk *c = &r->chunks.head[chunk_idx];
- int left_start = diff_atom_root_idx(&r->left, c->left_start);
- int left_end = MIN(r->left.atoms.len,
- left_start + c->left_count + context_lines);
- int right_start = diff_atom_root_idx(&r->right, c->right_start);
- int right_end = MIN(r->right.atoms.len,
- right_start + c->right_count + context_lines);
-
- left_start = MAX(0, left_start - context_lines);
- right_start = MAX(0, right_start - context_lines);
+ int left_start = diff_chunk_get_left_start(c, r, context_lines);
+ int left_end = diff_chunk_get_left_end(c, r, context_lines);
+ int right_start = diff_chunk_get_right_start(c, r, context_lines);
+ int right_end = diff_chunk_get_right_end(c, r, context_lines);
*cc = (struct diff_chunk_context){
.chunk = {