/* 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; }