diff options
| author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-06-02 11:24:02 -0300 | 
|---|---|---|
| committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-06-02 11:24:02 -0300 | 
| commit | cab8cf970c09ea465d30e11eb356e2e5d37dc544 (patch) | |
| tree | 5d274c892e4d53f5e976ae8f6f58aba030785e02 /src/nvim/fold.c | |
| parent | 52a9a5b0b0c53a1481d901f39ed0d1e7e86c3853 (diff) | |
| parent | 4aecb71b0e819aa84a430dacdab2146229c410a5 (diff) | |
| download | rneovim-cab8cf970c09ea465d30e11eb356e2e5d37dc544.tar.gz rneovim-cab8cf970c09ea465d30e11eb356e2e5d37dc544.tar.bz2 rneovim-cab8cf970c09ea465d30e11eb356e2e5d37dc544.zip | |
Merge pull request #710 'Automatically generate declarations'
Diffstat (limited to 'src/nvim/fold.c')
| -rw-r--r-- | src/nvim/fold.c | 105 | 
1 files changed, 31 insertions, 74 deletions
| diff --git a/src/nvim/fold.c b/src/nvim/fold.c index fe05ba76ac..e623c388ff 100644 --- a/src/nvim/fold.c +++ b/src/nvim/fold.c @@ -60,37 +60,33 @@ typedef struct {  #define MAX_LEVEL       20      /* maximum fold depth */ +/* Define "fline_T", passed to get fold level for a line. {{{2 */ +typedef struct { +  win_T       *wp;              /* window */ +  linenr_T lnum;                /* current line number */ +  linenr_T off;                 /* offset between lnum and real line number */ +  linenr_T lnum_save;           /* line nr used by foldUpdateIEMSRecurse() */ +  int lvl;                      /* current level (-1 for undefined) */ +  int lvl_next;                 /* level used for next line */ +  int start;                    /* number of folds that are forced to start at +                                   this line. */ +  int end;                      /* level of fold that is forced to end below +                                   this line */ +  int had_end;                  /* level of fold that is forced to end above +                                   this line (copy of "end" of prev. line) */ +} fline_T; + +/* Flag is set when redrawing is needed. */ +static int fold_changed; + +/* Function used by foldUpdateIEMSRecurse */ +typedef void (*LevelGetter)(fline_T *); +  /* static functions {{{2 */ -static void newFoldLevelWin(win_T *wp); -static int checkCloseRec(garray_T *gap, linenr_T lnum, int level); -static int foldFind(garray_T *gap, linenr_T lnum, fold_T **fpp); -static int foldLevelWin(win_T *wp, linenr_T lnum); -static void checkupdate(win_T *wp); -static void setFoldRepeat(linenr_T lnum, long count, int do_open); -static linenr_T setManualFold(linenr_T lnum, int opening, int recurse, -                              int *donep); -static linenr_T setManualFoldWin(win_T *wp, linenr_T lnum, int opening, -                                 int recurse, -                                 int *donep); -static void foldOpenNested(fold_T *fpr); -static void deleteFoldEntry(garray_T *gap, int idx, int recursive); -static void foldMarkAdjustRecurse(garray_T *gap, linenr_T line1, -                                  linenr_T line2, long amount, -                                  long amount_after); -static int getDeepestNestingRecurse(garray_T *gap); -static int check_closed(win_T *win, fold_T *fp, int *use_levelp, -                        int level, int *maybe_smallp, -                        linenr_T lnum_off); -static void checkSmall(win_T *wp, fold_T *fp, linenr_T lnum_off); -static void setSmallMaybe(garray_T *gap); -static void foldCreateMarkers(linenr_T start, linenr_T end); -static void foldAddMarker(linenr_T lnum, char_u *marker, int markerlen); -static void deleteFoldMarkers(fold_T *fp, int recursive, -                              linenr_T lnum_off); -static void foldDelMarker(linenr_T lnum, char_u *marker, int markerlen); -static void foldUpdateIEMS(win_T *wp, linenr_T top, linenr_T bot); -static void parseMarker(win_T *wp); +#ifdef INCLUDE_GENERATED_DECLARATIONS +# include "fold.c.generated.h" +#endif  static char *e_nofold = N_("E490: No fold found");  /* @@ -1868,39 +1864,7 @@ void foldtext_cleanup(char_u *str)  }  /* Folding by indent, expr, marker and syntax. {{{1 */ -/* Define "fline_T", passed to get fold level for a line. {{{2 */ -typedef struct { -  win_T       *wp;              /* window */ -  linenr_T lnum;                /* current line number */ -  linenr_T off;                 /* offset between lnum and real line number */ -  linenr_T lnum_save;           /* line nr used by foldUpdateIEMSRecurse() */ -  int lvl;                      /* current level (-1 for undefined) */ -  int lvl_next;                 /* level used for next line */ -  int start;                    /* number of folds that are forced to start at -                                   this line. */ -  int end;                      /* level of fold that is forced to end below -                                   this line */ -  int had_end;                  /* level of fold that is forced to end above -                                   this line (copy of "end" of prev. line) */ -} fline_T; - -/* Flag is set when redrawing is needed. */ -static int fold_changed; -  /* Function declarations. {{{2 */ -static linenr_T foldUpdateIEMSRecurse(garray_T *gap, int level, -                                      linenr_T startlnum, fline_T *flp, -                                      void (*getlevel)(fline_T *), linenr_T bot, -                                      int topflags); -static void foldInsert(garray_T *gap, int i); -static void foldSplit(garray_T *gap, int i, linenr_T top, linenr_T bot); -static void foldRemove(garray_T *gap, linenr_T top, linenr_T bot); -static void foldMerge(fold_T *fp1, garray_T *gap, fold_T *fp2); -static void foldlevelIndent(fline_T *flp); -static void foldlevelDiff(fline_T *flp); -static void foldlevelExpr(fline_T *flp); -static void foldlevelMarker(fline_T *flp); -static void foldlevelSyntax(fline_T *flp);  /* foldUpdateIEMS() {{{2 */  /* @@ -2137,15 +2101,12 @@ static void foldUpdateIEMS(win_T *wp, linenr_T top, linenr_T bot)   * Returns bot, which may have been increased for lines that also need to be   * updated as a result of a detected change in the fold.   */ -static linenr_T foldUpdateIEMSRecurse(gap, level, startlnum, flp, getlevel, bot, -    topflags) -garray_T    *gap; -int level; -linenr_T startlnum; -fline_T     *flp; -void        (*getlevel)(fline_T *); -linenr_T bot; -int topflags;                   /* flags used by containing fold */ +static linenr_T foldUpdateIEMSRecurse(garray_T *gap, int level, +                                      linenr_T startlnum, fline_T *flp, +                                      LevelGetter getlevel, +                                      linenr_T bot, +                                      int topflags /* flags used by containing fold */ +                                      )  {    linenr_T ll;    fold_T      *fp = NULL; @@ -2920,10 +2881,6 @@ static void foldlevelSyntax(fline_T *flp)  /* functions for storing the fold state in a View {{{1 */  /* put_folds() {{{2 */ -static int put_folds_recurse(FILE *fd, garray_T *gap, linenr_T off); -static int put_foldopen_recurse(FILE *fd, win_T *wp, garray_T *gap, -                                linenr_T off); -static int put_fold_open_close(FILE *fd, fold_T *fp, linenr_T off);  /*   * Write commands to "fd" to restore the manual folds in window "wp". | 
