1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */ 2 3 #ifndef __VT_LOGICAL_VISUAL_H__ 4 #define __VT_LOGICAL_VISUAL_H__ 5 6 #include "vt_model.h" 7 #include "vt_cursor.h" 8 #include "vt_bidi.h" /* vt_bidi_mode_t */ 9 10 /* 11 * LTR ... e.g. Mongolian 12 * RTL ... e.g. CJK 13 */ 14 typedef enum vt_vertical_mode { 15 VERT_LTR = 0x1, 16 VERT_RTL = 0x2, 17 18 VERT_MODE_MAX 19 20 } vt_vertical_mode_t; 21 22 typedef struct vt_logical_visual { 23 /* Private */ 24 25 vt_model_t *model; 26 vt_cursor_t *cursor; 27 28 int8_t is_visual; 29 30 /* Public */ 31 32 /* 33 * Whether logical <=> visual is reversible. 34 * 35 * XXX This flag is used to determine if logvis is vertical mode or not in vt_screen.c 36 * (vt_screen_set_use_status_line()) 37 */ 38 int8_t is_reversible; 39 40 int (*init)(struct vt_logical_visual *, vt_model_t *, vt_cursor_t *); 41 42 int (*destroy)(struct vt_logical_visual *); 43 44 u_int (*logical_cols)(struct vt_logical_visual *); 45 u_int (*logical_rows)(struct vt_logical_visual *); 46 47 /* 48 * !! Notice !! 49 * vt_model_t should not be modified from render/viaul until logical. 50 * Any modification is done from logical until render/visual. 51 */ 52 void (*render)(struct vt_logical_visual *); 53 int (*visual)(struct vt_logical_visual *); 54 int (*logical)(struct vt_logical_visual *); 55 56 void (*visual_line)(struct vt_logical_visual *, vt_line_t *line); 57 58 } vt_logical_visual_t; 59 60 vt_logical_visual_t *vt_logvis_container_new(void); 61 62 int vt_logvis_container_add(vt_logical_visual_t *logvis, vt_logical_visual_t *child); 63 64 vt_logical_visual_t *vt_logvis_comb_new(void); 65 66 vt_logical_visual_t *vt_logvis_vert_new(vt_vertical_mode_t vertical_mode); 67 68 vt_vertical_mode_t vt_get_vertical_mode_by_name(const char *name); 69 70 char *vt_get_vertical_mode_name(vt_vertical_mode_t mode); 71 72 #if !defined(NO_DYNAMIC_LOAD_CTL) || defined(USE_FRIBIDI) || defined(USE_IND) || \ 73 defined(USE_OT_LAYOUT) 74 vt_logical_visual_t *vt_logvis_ctl_new(vt_bidi_mode_t mode, const char *separators, void *term); 75 76 int vt_logical_visual_cursor_is_rtl(vt_logical_visual_t *logvis); 77 #else 78 #define vt_logvis_ctl_new(mode, separators, term) (0) 79 #define vt_logical_visual_cursor_is_rtl(logvis) (0) 80 #endif 81 82 #endif /* __VT_LOGICAL_VISUAL_H__ */ 83