diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2023-11-29 21:52:58 +0000 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2023-11-29 21:52:58 +0000 |
commit | 931bffbda3668ddc609fc1da8f9eb576b170aa52 (patch) | |
tree | d8c1843a95da5ea0bb4acc09f7e37843d9995c86 /src/nvim/grid.h | |
parent | 142d9041391780ac15b89886a54015fdc5c73995 (diff) | |
parent | 4a8bf24ac690004aedf5540fa440e788459e5e34 (diff) | |
download | rneovim-userreg.tar.gz rneovim-userreg.tar.bz2 rneovim-userreg.zip |
Merge remote-tracking branch 'upstream/master' into userreguserreg
Diffstat (limited to 'src/nvim/grid.h')
-rw-r--r-- | src/nvim/grid.h | 59 |
1 files changed, 27 insertions, 32 deletions
diff --git a/src/nvim/grid.h b/src/nvim/grid.h index deb3d3785d..9d8e395dae 100644 --- a/src/nvim/grid.h +++ b/src/nvim/grid.h @@ -1,15 +1,14 @@ -#ifndef NVIM_GRID_H -#define NVIM_GRID_H +#pragma once #include <stdbool.h> +#include <stddef.h> // IWYU pragma: keep #include <string.h> -#include "nvim/ascii.h" #include "nvim/buffer_defs.h" -#include "nvim/grid_defs.h" -#include "nvim/macros.h" +#include "nvim/grid_defs.h" // IWYU pragma: export +#include "nvim/macros_defs.h" #include "nvim/mbyte.h" -#include "nvim/memory.h" +#include "nvim/pos_defs.h" /// By default, all windows are drawn on a single rectangular grid, represented by /// this ScreenGrid instance. In multigrid mode each window will have its own @@ -18,47 +17,43 @@ /// /// Note: before the screen is initialized and when out of memory these can be /// NULL. -EXTERN ScreenGrid default_grid INIT(= SCREEN_GRID_INIT); +EXTERN ScreenGrid default_grid INIT( = SCREEN_GRID_INIT); #define DEFAULT_GRID_HANDLE 1 // handle for the default_grid /// While resizing the screen this flag is set. -EXTERN bool resizing_screen INIT(= 0); +EXTERN bool resizing_screen INIT( = 0); -EXTERN schar_T *linebuf_char INIT(= NULL); -EXTERN sattr_T *linebuf_attr INIT(= NULL); +EXTERN schar_T *linebuf_char INIT( = NULL); +EXTERN sattr_T *linebuf_attr INIT( = NULL); +EXTERN colnr_T *linebuf_vcol INIT( = NULL); +EXTERN char *linebuf_scratch INIT( = NULL); // Low-level functions to manipulate individual character cells on the // screen grid. /// Put a ASCII character in a screen cell. -static inline void schar_from_ascii(char *p, const char c) -{ - p[0] = c; - p[1] = 0; -} +/// +/// If `x` is a compile time constant, schar_from_ascii(x) will also be. +/// But the specific value varies per platform. +#ifdef ORDER_BIG_ENDIAN +# define schar_from_ascii(x) ((schar_T)((x) << 24)) +#else +# define schar_from_ascii(x) ((schar_T)(x)) +#endif /// Put a unicode character in a screen cell. -static inline int schar_from_char(char *p, int c) -{ - int len = utf_char2bytes(c, p); - p[len] = NUL; - return len; -} - -/// compare the contents of two screen cells. -static inline int schar_cmp(char *sc1, char *sc2) -{ - return strncmp(sc1, sc2, sizeof(schar_T)); -} - -/// copy the contents of screen cell `sc2` into cell `sc1` -static inline void schar_copy(char *sc1, char *sc2) +static inline schar_T schar_from_char(int c) { - xstrlcpy(sc1, sc2, sizeof(schar_T)); + schar_T sc = 0; + if (c >= 0x200000) { + // TODO(bfredl): this must NEVER happen, even if the file contained overlong sequences + c = 0xFFFD; + } + utf_char2bytes(c, (char *)&sc); + return sc; } #ifdef INCLUDE_GENERATED_DECLARATIONS # include "grid.h.generated.h" #endif -#endif // NVIM_GRID_H |