diff options
Diffstat (limited to 'libpatch_plain_diff2_printer__.c')
-rw-r--r-- | libpatch_plain_diff2_printer__.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/libpatch_plain_diff2_printer__.c b/libpatch_plain_diff2_printer__.c new file mode 100644 index 0000000..f345e86 --- /dev/null +++ b/libpatch_plain_diff2_printer__.c @@ -0,0 +1,81 @@ +/* See LICENSE file for copyright and license details. */ +#include "common.h" + + +#define PUT(THIS, TEXT, LEN)\ + (((struct printer_internals *)(THIS)->user_data)->put((THIS), (TEXT), (LEN))) + + +static void +put_text(struct libpatch_diff2_printer *printer, const char *text) +{ + PUT(printer, text, strlen(text)); +} + +static void +put_text_zu_discard_i(struct libpatch_diff2_printer *printer, const char *text1, size_t text2, int a) +{ + char buf[3 * sizeof(text2) + 1]; + (void) a; + PUT(printer, text1, strlen(text1)); + PUT(printer, buf, (size_t)sprintf(buf, "%zu", text2)); +} + +static void +put_text_discard_i(struct libpatch_diff2_printer *printer, const char *text, int a) +{ + (void) a; + PUT(printer, text, strlen(text)); +} + +static void +put_text_discard_ii(struct libpatch_diff2_printer *printer, const char *text, int a, int b) +{ + (void) a; + (void) b; + PUT(printer, text, strlen(text)); +} + +static void +put_text_discard_iizu(struct libpatch_diff2_printer *printer, const char *text, int a, int b, size_t c) +{ + (void) a; + (void) b; + (void) c; + PUT(printer, text, strlen(text)); +} + +static void +put_newline(struct libpatch_diff2_printer *printer) +{ + PUT(printer, "\n", 1); +} + +static void +put_line(struct libpatch_diff2_printer *printer, struct libpatch_line *line) +{ + PUT(printer, line->text, line->len); +} + + +void +libpatch_plain_diff2_printer__(struct libpatch_diff2_printer *printer) +{ + printer->put_end_of_change = &put_text; + printer->put_syntactical_escape = &put_text; + printer->put_syntactical_garbage = &put_text; + printer->put_hunk_head_prefix = &put_text_discard_i; + printer->put_hunk_head_suffix = &put_text_discard_i; + printer->put_hunk_start = &put_text_zu_discard_i; + printer->put_hunk_end = &put_text_zu_discard_i; + printer->put_hunk_length = &put_text_zu_discard_i; + printer->put_hunk_operation = &put_text_discard_ii; + printer->put_label_prefix = &put_text_discard_i; + printer->put_label = &put_text_discard_i; + printer->put_context_prefix = &put_text_discard_iizu; + printer->put_change_prefix = &put_text_discard_iizu; + printer->put_line = &put_line; + printer->put_whitespace = &put_text; + printer->put_newline = &put_newline; + printer->put_no_newline = &put_text; +} |