187 lines
4.2 KiB
C
187 lines
4.2 KiB
C
|
/* date = July 7th 2020 7:47 am */
|
||
|
|
||
|
#ifndef DEFINITION_H
|
||
|
#define DEFINITION_H
|
||
|
|
||
|
typedef u32 E_DefinitionFlags;
|
||
|
enum{
|
||
|
E_DefinitionFlag_Invalid = (1 << 0),
|
||
|
E_DefinitionFlag_Page = (1 << 1),
|
||
|
E_DefinitionFlag_Test = (1 << 2),
|
||
|
};
|
||
|
|
||
|
typedef struct E_Definition E_Definition;
|
||
|
struct E_Definition{
|
||
|
// NOTE(allen): State
|
||
|
|
||
|
E_Definition *ordered_next;
|
||
|
E_Definition *ordered_prev;
|
||
|
E_Definition *next;
|
||
|
E_Definition *prev;
|
||
|
struct E_Space *space;
|
||
|
|
||
|
E_DefinitionFlags flags;
|
||
|
STR_Index last_name;
|
||
|
C_Id id;
|
||
|
b32 delete_me;
|
||
|
|
||
|
// NOTE(allen): Contents
|
||
|
|
||
|
C_Token name_token_buffer;
|
||
|
union{
|
||
|
struct{
|
||
|
E_TokenBuffer name;
|
||
|
E_TokenBuffer body;
|
||
|
};
|
||
|
E_TokenBuffer buffers[2];
|
||
|
};
|
||
|
|
||
|
// NOTE(allen): Compute
|
||
|
|
||
|
b32 invalid_name_field;
|
||
|
C_CellBucket bucket;
|
||
|
u64 error_count;
|
||
|
C_ParseError errors[20];
|
||
|
union{
|
||
|
struct{
|
||
|
C_Cell *name_cell;
|
||
|
C_Cell *body_cell;
|
||
|
};
|
||
|
C_Cell *cells[2];
|
||
|
};
|
||
|
|
||
|
C_Deferred deferred;
|
||
|
};
|
||
|
|
||
|
typedef struct E_Space E_Space;
|
||
|
struct E_Space{
|
||
|
E_Space *ordered_next;
|
||
|
E_Space *ordered_prev;
|
||
|
E_Space *next;
|
||
|
E_Space *prev;
|
||
|
|
||
|
b32 invalid;
|
||
|
STR_Index last_name;
|
||
|
|
||
|
C_Cell *defines_env;
|
||
|
C_Cell *id_env;
|
||
|
C_Cell *id_list;
|
||
|
u64 id_counter;
|
||
|
|
||
|
E_Definition *first_definition;
|
||
|
E_Definition *last_definition;
|
||
|
E_Definition *first_invalid_definition;
|
||
|
E_Definition *last_invalid_definition;
|
||
|
E_Definition *first_definition_ordered;
|
||
|
E_Definition *last_definition_ordered;
|
||
|
|
||
|
b32 delete_signal;
|
||
|
|
||
|
b32 init_error;
|
||
|
b32 dirty;
|
||
|
f32 last_save_time;
|
||
|
STR_Index save_path;
|
||
|
|
||
|
u64 identifier_available_count;
|
||
|
STR_Index identifier_available[8];
|
||
|
};
|
||
|
|
||
|
////////////////////////////////
|
||
|
|
||
|
typedef struct E_Tile E_Tile;
|
||
|
struct E_Tile{
|
||
|
E_Tile *next;
|
||
|
E_Tile *prev;
|
||
|
|
||
|
struct E_TileCache *tile_cache;
|
||
|
b32 free_me;
|
||
|
|
||
|
E_Definition *definition;
|
||
|
union{
|
||
|
struct{
|
||
|
E_EditorState name;
|
||
|
E_EditorState body;
|
||
|
};
|
||
|
E_EditorState editors[2];
|
||
|
};
|
||
|
|
||
|
R_Font *font;
|
||
|
};
|
||
|
|
||
|
typedef struct E_ViewCallbackIn E_ViewCallbackIn;
|
||
|
struct E_ViewCallbackIn{
|
||
|
E_Definition *definition;
|
||
|
};
|
||
|
|
||
|
typedef union E_ViewCallbackOut E_ViewCallbackOut;
|
||
|
union E_ViewCallbackOut{
|
||
|
E_Definition *definition;
|
||
|
String8 name;
|
||
|
};
|
||
|
|
||
|
#define VIEW_CALLBACK_SIG(name) void name(struct E_View *view, E_ViewCallbackIn *in, E_ViewCallbackOut *out)
|
||
|
typedef VIEW_CALLBACK_SIG(E_ViewCallback);
|
||
|
|
||
|
/* NOTE(allen): View v-table
|
||
|
** derive_from_source (void) (void)
|
||
|
** create_new_definition (void) (out->definition)
|
||
|
** look_at_definition (in->definition) (void)
|
||
|
** cleanup (void) (void)
|
||
|
** shutdown (void) (void)
|
||
|
** get_name (void) (out->name)
|
||
|
*/
|
||
|
|
||
|
typedef enum{
|
||
|
E_ViewKind_Null,
|
||
|
E_ViewKind_Global,
|
||
|
E_ViewKind_Page,
|
||
|
} E_ViewKind;
|
||
|
|
||
|
typedef struct E_View E_View;
|
||
|
struct E_View{
|
||
|
E_ViewKind kind;
|
||
|
|
||
|
E_View *prev;
|
||
|
E_View *next;
|
||
|
|
||
|
// NOTE(allen): v-table
|
||
|
E_ViewCallback *derive_from_source;
|
||
|
E_ViewCallback *create_new_definition;
|
||
|
E_ViewCallback *look_at_definition;
|
||
|
E_ViewCallback *cleanup;
|
||
|
E_ViewCallback *shutdown;
|
||
|
E_ViewCallback *get_name;
|
||
|
|
||
|
// NOTE(allen): Tiles
|
||
|
R_Font *font;
|
||
|
E_Tile *first_tile;
|
||
|
E_Tile *last_tile;
|
||
|
b32 free_children;
|
||
|
f32 scroll_y;
|
||
|
|
||
|
// NOTE(allen): Variables
|
||
|
E_Space *space;
|
||
|
String8 name;
|
||
|
E_Definition *definition;
|
||
|
b32 state_ahead_of_source;
|
||
|
};
|
||
|
|
||
|
////////////////////////////////
|
||
|
|
||
|
internal E_View* E_NewView(void);
|
||
|
internal void E_DeleteView(E_View *view);
|
||
|
|
||
|
internal void E_ViewDeriveFromSource(E_View *view);
|
||
|
internal E_Definition* E_ViewCreateNewDefinition(E_View *view);
|
||
|
internal void E_ViewLookAtDefinition(E_View *view, E_Definition *definition);
|
||
|
internal b32 E_ViewWillLookAtDefinition(E_View *view);
|
||
|
internal void E_ViewCleanup(E_View *view);
|
||
|
internal b32 E_ViewWillCloseDefinition(E_View *view);
|
||
|
internal void E_ViewShutdown(E_View *view);
|
||
|
internal String8 E_ViewGetName(E_View *view);
|
||
|
|
||
|
internal void E_InitGlobalView(E_View *view, R_Font *font, E_Space *space);
|
||
|
internal void E_InitPageView(E_View *view, R_Font *font, E_Definition *definition);
|
||
|
|
||
|
#endif //DEFINITION_H
|