neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

xdiff.h (4003B)


      1 /*
      2 *  LibXDiff by Davide Libenzi ( File Differential Library )
      3 *  Copyright (C) 2003  Davide Libenzi
      4 *
      5 *  This library is free software; you can redistribute it and/or
      6 *  modify it under the terms of the GNU Lesser General Public
      7 *  License as published by the Free Software Foundation; either
      8 *  version 2.1 of the License, or (at your option) any later version.
      9 *
     10 *  This library is distributed in the hope that it will be useful,
     11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13 *  Lesser General Public License for more details.
     14 *
     15 *  You should have received a copy of the GNU Lesser General Public
     16 *  License along with this library; if not, see
     17 *  <http://www.gnu.org/licenses/>.
     18 *
     19 *  Davide Libenzi <davidel@xmailserver.org>
     20 *
     21 */
     22 
     23 #if !defined(XDIFF_H)
     24 #define XDIFF_H
     25 
     26 #ifdef __cplusplus
     27 extern "C" {
     28 #endif /* #ifdef __cplusplus */
     29 
     30 /* xpparm_t.flags */
     31 #define XDF_NEED_MINIMAL (1 << 0)
     32 
     33 #define XDF_IGNORE_WHITESPACE (1 << 1)
     34 #define XDF_IGNORE_WHITESPACE_CHANGE (1 << 2)
     35 #define XDF_IGNORE_WHITESPACE_AT_EOL (1 << 3)
     36 #define XDF_IGNORE_CR_AT_EOL (1 << 4)
     37 #define XDF_WHITESPACE_FLAGS (XDF_IGNORE_WHITESPACE | \
     38 		      XDF_IGNORE_WHITESPACE_CHANGE | \
     39 		      XDF_IGNORE_WHITESPACE_AT_EOL | \
     40 		      XDF_IGNORE_CR_AT_EOL)
     41 
     42 #define XDF_IGNORE_BLANK_LINES (1 << 7)
     43 
     44 #define XDF_PATIENCE_DIFF (1 << 14)
     45 #define XDF_HISTOGRAM_DIFF (1 << 15)
     46 #define XDF_DIFF_ALGORITHM_MASK (XDF_PATIENCE_DIFF | XDF_HISTOGRAM_DIFF)
     47 #define XDF_DIFF_ALG(x) ((x) & XDF_DIFF_ALGORITHM_MASK)
     48 
     49 #define XDF_INDENT_HEURISTIC (1 << 23)
     50 
     51 /* xdemitconf_t.flags */
     52 #define XDL_EMIT_FUNCNAMES (1 << 0)
     53 #define XDL_EMIT_NO_HUNK_HDR (1 << 1)
     54 #define XDL_EMIT_FUNCCONTEXT (1 << 2)
     55 
     56 /* merge simplification levels */
     57 #define XDL_MERGE_MINIMAL 0
     58 #define XDL_MERGE_EAGER 1
     59 #define XDL_MERGE_ZEALOUS 2
     60 #define XDL_MERGE_ZEALOUS_ALNUM 3
     61 
     62 /* merge favor modes */
     63 #define XDL_MERGE_FAVOR_OURS 1
     64 #define XDL_MERGE_FAVOR_THEIRS 2
     65 #define XDL_MERGE_FAVOR_UNION 3
     66 
     67 /* merge output styles */
     68 #define XDL_MERGE_DIFF3 1
     69 
     70 typedef struct s_mmfile {
     71 char *ptr;
     72 int size;
     73 } mmfile_t;
     74 
     75 typedef struct s_mmbuffer {
     76 char *ptr;
     77 int size;
     78 } mmbuffer_t;
     79 
     80 typedef struct s_xpparam {
     81 unsigned long flags;
     82 
     83 /* -I<regex> */
     84 #if 0  // unused by Vim
     85 regex_t **ignore_regex;
     86 size_t ignore_regex_nr;
     87 #endif
     88 
     89 /* See Documentation/diff-options.txt. */
     90 char **anchors;
     91 size_t anchors_nr;
     92 } xpparam_t;
     93 
     94 typedef struct s_xdemitcb {
     95 void *priv;
     96 int (*out_hunk)(void *,
     97 		long old_begin, long old_nr,
     98 		long new_begin, long new_nr,
     99 		const char *func, long funclen);
    100 int (*out_line)(void *, mmbuffer_t *, int);
    101 } xdemitcb_t;
    102 
    103 typedef long (*find_func_t)(const char *line, long line_len, char *buffer, long buffer_size, void *priv);
    104 
    105 typedef int (*xdl_emit_hunk_consume_func_t)(int start_a, int count_a,
    106 				    int start_b, int count_b,
    107 				    void *cb_data);
    108 
    109 typedef struct s_xdemitconf {
    110 long ctxlen;
    111 long interhunkctxlen;
    112 unsigned long flags;
    113 find_func_t find_func;
    114 void *find_func_priv;
    115 xdl_emit_hunk_consume_func_t hunk_func;
    116 } xdemitconf_t;
    117 
    118 typedef struct s_bdiffparam {
    119 long bsize;
    120 } bdiffparam_t;
    121 
    122 #include "../nvim/memory.h"
    123 
    124 #define xdl_malloc(x) xmalloc((x))
    125 #define xdl_free(ptr) xfree(ptr)
    126 #define xdl_realloc(ptr,x) xrealloc((ptr),(x))
    127 
    128 void *xdl_mmfile_first(mmfile_t *mmf, long *size);
    129 long xdl_mmfile_size(mmfile_t *mmf);
    130 
    131 int xdl_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
    132      xdemitconf_t const *xecfg, xdemitcb_t *ecb);
    133 
    134 typedef struct s_xmparam {
    135 xpparam_t xpp;
    136 int marker_size;
    137 int level;
    138 int favor;
    139 int style;
    140 const char *ancestor;	/* label for orig */
    141 const char *file1;	/* label for mf1 */
    142 const char *file2;	/* label for mf2 */
    143 } xmparam_t;
    144 
    145 #define DEFAULT_CONFLICT_MARKER_SIZE 7
    146 
    147 int xdl_merge(mmfile_t *orig, mmfile_t *mf1, mmfile_t *mf2,
    148 	xmparam_t const *xmp, mmbuffer_t *result);
    149 
    150 #ifdef __cplusplus
    151 }
    152 #endif /* #ifdef __cplusplus */
    153 
    154 #endif /* #if !defined(XDIFF_H) */