meta generate styles
This commit is contained in:
parent
78653ef118
commit
f0e2ca99a5
|
@ -191,6 +191,28 @@ CUSTOM_COMMAND_SIG(backspace_word){
|
|||
app->buffer_replace_range(app, &buffer, pos1, pos2, 0, 0);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(snipe_token_or_word){
|
||||
View_Summary view;
|
||||
Buffer_Summary buffer;
|
||||
int pos1, pos2;
|
||||
|
||||
view = app->get_active_view(app);
|
||||
|
||||
push_parameter(app, par_flags, BoundryToken | BoundryWhitespace);
|
||||
exec_command(app, cmdid_seek_left);
|
||||
app->refresh_view(app, &view);
|
||||
pos1 = view.cursor.pos;
|
||||
|
||||
push_parameter(app, par_flags, BoundryToken | BoundryWhitespace);
|
||||
exec_command(app, cmdid_seek_right);
|
||||
app->refresh_view(app, &view);
|
||||
pos2 = view.cursor.pos;
|
||||
|
||||
Range range = make_range(pos1, pos2);
|
||||
buffer = app->get_buffer(app, view.buffer_id);
|
||||
app->buffer_replace_range(app, &buffer, range.start, range.end, 0, 0);
|
||||
}
|
||||
|
||||
CUSTOM_COMMAND_SIG(switch_to_compilation){
|
||||
View_Summary view;
|
||||
Buffer_Summary buffer;
|
||||
|
@ -647,7 +669,7 @@ CUSTOM_COMMAND_SIG(execute_any_cli){
|
|||
hot_directory = make_fixed_width_string(even_more_space);
|
||||
hot_directory.size = app->directory_get_hot(app, hot_directory.str, hot_directory.memory_size);
|
||||
|
||||
push_parameter(app, par_cli_flags, CLI_OverlapWithConflict);
|
||||
push_parameter(app, par_flags, CLI_OverlapWithConflict);
|
||||
push_parameter(app, par_name, bar_out.string.str, bar_out.string.size);
|
||||
push_parameter(app, par_cli_path, hot_directory.str, hot_directory.size);
|
||||
push_parameter(app, par_cli_command, bar_cmd.string.str, bar_cmd.string.size);
|
||||
|
@ -734,7 +756,7 @@ CUSTOM_COMMAND_SIG(build_at_launch_location){
|
|||
// An example of calling build by setting all
|
||||
// parameters directly. This only works if build.bat can be called
|
||||
// from the directory the application is launched at.
|
||||
push_parameter(app, par_cli_flags, CLI_OverlapWithConflict);
|
||||
push_parameter(app, par_flags, CLI_OverlapWithConflict);
|
||||
push_parameter(app, par_name, literal("*compilation*"));
|
||||
push_parameter(app, par_cli_path, literal("."));
|
||||
push_parameter(app, par_cli_command, literal("build"));
|
||||
|
@ -751,7 +773,7 @@ CUSTOM_COMMAND_SIG(build_search){
|
|||
//
|
||||
// Step 2: app->file_exists queries the file system to see if "<somedir>/build.bat" exists.
|
||||
// If it does exist several parameters are pushed and cmdid_command_line is executed:
|
||||
// - par_cli_flags: flags for specifiying behaviors
|
||||
// - par_flags: flags for specifiying behaviors
|
||||
// CLI_OverlapWithConflict - (on by default) if another CLI is still using the output buffer
|
||||
// that process is detached from the buffer and this process executes outputing to the buffer
|
||||
// CLI_AlwaysBindToView - if set, the current view always switches to the output buffer
|
||||
|
@ -789,7 +811,7 @@ CUSTOM_COMMAND_SIG(build_search){
|
|||
if (app->file_exists(app, dir.str, dir.size)){
|
||||
dir.size = old_size;
|
||||
|
||||
push_parameter(app, par_cli_flags, 0);
|
||||
push_parameter(app, par_flags, 0);
|
||||
push_parameter(app, par_name, literal("*compilation*"));
|
||||
push_parameter(app, par_cli_path, dir.str, dir.size);
|
||||
|
||||
|
@ -1012,6 +1034,7 @@ extern "C" GET_BINDING_DATA(get_bindings){
|
|||
bind(context, key_down, MDFR_ALT, move_down_10);
|
||||
|
||||
bind(context, key_back, MDFR_CTRL, backspace_word);
|
||||
bind(context, key_back, MDFR_ALT, snipe_token_or_word);
|
||||
|
||||
bind(context, ' ', MDFR_CTRL, cmdid_set_mark);
|
||||
bind(context, 'm', MDFR_CTRL, cmdid_cursor_mark_swap);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
#include "4coder_version.h"
|
||||
#include "4coder_keycodes.h"
|
||||
#include "4coder_style.h"
|
||||
#include "4coder_buffer_types.h"
|
||||
|
||||
#ifndef FRED_STRING_STRUCT
|
||||
|
@ -161,6 +162,8 @@ typedef struct File_List{
|
|||
enum Command_ID{
|
||||
cmdid_null,
|
||||
cmdid_write_character,
|
||||
cmdid_seek_left,
|
||||
cmdid_seek_right,
|
||||
cmdid_seek_whitespace_right,
|
||||
cmdid_seek_whitespace_left,
|
||||
cmdid_seek_whitespace_up,
|
||||
|
@ -233,12 +236,12 @@ enum Param_ID{
|
|||
par_name,
|
||||
par_buffer_id,
|
||||
par_do_in_background,
|
||||
par_flags,
|
||||
par_lex_as_cpp_file,
|
||||
par_wrap_lines,
|
||||
par_key_mapid,
|
||||
par_cli_path,
|
||||
par_cli_command,
|
||||
par_cli_flags,
|
||||
par_clear_blank_lines,
|
||||
// never below this
|
||||
par_type_count
|
||||
|
@ -286,6 +289,8 @@ struct View_Summary{
|
|||
int exists;
|
||||
int view_id;
|
||||
int buffer_id;
|
||||
int locked_buffer_id;
|
||||
int hidden_buffer_id;
|
||||
|
||||
Full_Cursor cursor;
|
||||
Full_Cursor mark;
|
||||
|
@ -350,9 +355,10 @@ struct Application_Links;
|
|||
#define GET_PARAMETER_BUFFER_SIG(name) Buffer_Summary name(Application_Links *app, int param_index)
|
||||
#define GET_BUFFER_BY_NAME(name) Buffer_Summary name(Application_Links *app, char *filename, int len)
|
||||
|
||||
#define REFRESH_BUFFER_SIG(name) int name(Application_Links *app, Buffer_Summary *buffer)
|
||||
#define BUFFER_SEEK_DELIMITER_SIG(name) int name(Application_Links *app, Buffer_Summary *buffer, int start, char delim, int seek_forward, int *out)
|
||||
#define BUFFER_SEEK_STRING_SIG(name) int name(Application_Links *app, Buffer_Summary *buffer, int start, char *str, int len, int seek_forward, int *out)
|
||||
|
||||
#define REFRESH_BUFFER_SIG(name) int name(Application_Links *app, Buffer_Summary *buffer)
|
||||
#define BUFFER_READ_RANGE_SIG(name) int name(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *out)
|
||||
#define BUFFER_REPLACE_RANGE_SIG(name) int name(Application_Links *app, Buffer_Summary *buffer, int start, int end, char *str, int len)
|
||||
#define BUFFER_SET_POS_SIG(name) int name(Application_Links *app, Buffer_Summary *buffer, int pos)
|
||||
|
@ -371,6 +377,23 @@ struct Application_Links;
|
|||
#define VIEW_SET_BUFFER_SIG(name) int name(Application_Links *app, View_Summary *view, int buffer_id)
|
||||
|
||||
// Directly get user input
|
||||
#define GET_USER_INPUT_SIG(name) User_Input name(Application_Links *context, unsigned int get_type, unsigned int abort_type)
|
||||
|
||||
// Queries
|
||||
#define START_QUERY_BAR_SIG(name) int name(Application_Links *context, Query_Bar *bar, unsigned int flags)
|
||||
#define END_QUERY_BAR_SIG(name) void name(Application_Links *context, Query_Bar *bar, unsigned int flags)
|
||||
|
||||
|
||||
|
||||
// Boundry type flags
|
||||
#define BoundryWhitespace 0x1
|
||||
#define BoundryToken 0x2
|
||||
#define BoundryAlphanumeric 0x4
|
||||
#define BoundryCamelCase 0x8
|
||||
|
||||
|
||||
|
||||
// Input type flags
|
||||
#define EventOnAnyKey 0x1
|
||||
#define EventOnEsc 0x2
|
||||
#define EventOnLeftButton 0x4
|
||||
|
@ -382,11 +405,7 @@ struct Application_Links;
|
|||
#define EventOnMouseMove 0x20
|
||||
#define EventOnMouse (EventOnButton | EventOnMouseMove)
|
||||
|
||||
#define GET_USER_INPUT_SIG(name) User_Input name(Application_Links *context, unsigned int get_type, unsigned int abort_type)
|
||||
|
||||
// Queries
|
||||
#define START_QUERY_BAR_SIG(name) int name(Application_Links *context, Query_Bar *bar, unsigned int flags)
|
||||
#define END_QUERY_BAR_SIG(name) void name(Application_Links *context, Query_Bar *bar, unsigned int flags)
|
||||
|
||||
extern "C"{
|
||||
// Command exectuion
|
||||
|
@ -411,9 +430,10 @@ extern "C"{
|
|||
typedef GET_PARAMETER_BUFFER_SIG(Get_Parameter_Buffer_Function);
|
||||
typedef GET_BUFFER_BY_NAME(Get_Buffer_By_Name_Function);
|
||||
|
||||
typedef REFRESH_BUFFER_SIG(Refresh_Buffer_Function);
|
||||
typedef BUFFER_SEEK_DELIMITER_SIG(Buffer_Seek_Delimiter_Function);
|
||||
typedef BUFFER_SEEK_STRING_SIG(Buffer_Seek_String_Function);
|
||||
|
||||
typedef REFRESH_BUFFER_SIG(Refresh_Buffer_Function);
|
||||
typedef BUFFER_READ_RANGE_SIG(Buffer_Read_Range_Function);
|
||||
typedef BUFFER_REPLACE_RANGE_SIG(Buffer_Replace_Range_Function);
|
||||
typedef BUFFER_SET_POS_SIG(Buffer_Set_Pos_Function);
|
||||
|
@ -466,9 +486,10 @@ struct Application_Links{
|
|||
Get_Parameter_Buffer_Function *get_parameter_buffer;
|
||||
Get_Buffer_By_Name_Function *get_buffer_by_name;
|
||||
|
||||
Refresh_Buffer_Function *refresh_buffer;
|
||||
Buffer_Seek_Delimiter_Function *buffer_seek_delimiter;
|
||||
Buffer_Seek_String_Function *buffer_seek_string;
|
||||
|
||||
Refresh_Buffer_Function *refresh_buffer;
|
||||
Buffer_Read_Range_Function *buffer_read_range;
|
||||
Buffer_Replace_Range_Function *buffer_replace_range;
|
||||
Buffer_Set_Pos_Function *buffer_set_pos;
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
enum Style_Tag{
|
||||
Stag_Bar,
|
||||
Stag_Bar_Active,
|
||||
Stag_Base,
|
||||
Stag_Pop1,
|
||||
Stag_Pop2,
|
||||
Stag_Back,
|
||||
Stag_Margin,
|
||||
Stag_Margin_Hover,
|
||||
Stag_Margin_Active,
|
||||
Stag_Cursor,
|
||||
Stag_At_Cursor,
|
||||
Stag_Highlight,
|
||||
Stag_At_Highlight,
|
||||
Stag_Mark,
|
||||
Stag_Default,
|
||||
Stag_Comment,
|
||||
Stag_Keyword,
|
||||
Stag_Str_Constant,
|
||||
Stag_Char_Constant,
|
||||
Stag_Int_Constant,
|
||||
Stag_Float_Constant,
|
||||
Stag_Bool_Constant,
|
||||
Stag_Preproc,
|
||||
Stag_Include,
|
||||
Stag_Special_Character,
|
||||
Stag_Highlight_Junk,
|
||||
Stag_Highlight_White,
|
||||
Stag_Paste,
|
||||
Stag_Undo,
|
||||
Stag_Next_Undo,
|
||||
};
|
||||
|
340
4ed.cpp
340
4ed.cpp
|
@ -230,33 +230,6 @@ COMMAND_DECL(seek_whitespace_right){
|
|||
view_cursor_move(view, pos);
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_whitespace_left){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
i32 pos = buffer_seek_whitespace_left(&file->state.buffer, view->cursor.pos);
|
||||
view_cursor_move(view, pos);
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_whitespace_up){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
i32 pos = buffer_seek_whitespace_up(&file->state.buffer, view->cursor.pos);
|
||||
view_cursor_move(view, pos);
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_whitespace_down){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
i32 pos = buffer_seek_whitespace_down(&file->state.buffer, view->cursor.pos);
|
||||
view_cursor_move(view, pos);
|
||||
}
|
||||
|
||||
internal i32
|
||||
seek_token_left(Cpp_Token_Stack *tokens, i32 pos){
|
||||
Cpp_Get_Token_Result get = cpp_get_token(tokens, pos);
|
||||
|
@ -286,6 +259,141 @@ seek_token_right(Cpp_Token_Stack *tokens, i32 pos){
|
|||
return token->start + token->size;
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_left){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
u32 flags = BoundryWhitespace;
|
||||
|
||||
Command_Parameter *end = param_stack_end(&command->part);
|
||||
Command_Parameter *param = param_stack_first(&command->part, end);
|
||||
for (; param < end; param = param_next(param, end)){
|
||||
int p = dynamic_to_int(¶m->param.param);
|
||||
switch (p){
|
||||
case par_flags:
|
||||
flags = dynamic_to_int(¶m->param.value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
i32 pos[4] = {0};
|
||||
|
||||
if (flags & (1)){
|
||||
pos[0] = buffer_seek_whitespace_left(&file->state.buffer, view->cursor.pos);
|
||||
}
|
||||
|
||||
if (flags & (1 << 1)){
|
||||
if (file->state.tokens_complete){
|
||||
pos[1] = seek_token_left(&file->state.token_stack, view->cursor.pos);
|
||||
}
|
||||
else{
|
||||
pos[1] = buffer_seek_whitespace_left(&file->state.buffer, view->cursor.pos);
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & (1 << 2)){
|
||||
pos[2] = buffer_seek_alphanumeric_left(&file->state.buffer, view->cursor.pos);
|
||||
if (flags & (1 << 3)){
|
||||
pos[3] = buffer_seek_range_camel_left(&file->state.buffer, view->cursor.pos, pos[2]);
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (flags & (1 << 3)){
|
||||
pos[3] = buffer_seek_alphanumeric_or_camel_left(&file->state.buffer, view->cursor.pos);
|
||||
}
|
||||
}
|
||||
|
||||
i32 new_pos = 0;
|
||||
for (i32 i = 0; i < ArrayCount(pos); ++i){
|
||||
if (pos[i] > new_pos) new_pos = pos[i];
|
||||
}
|
||||
|
||||
view_cursor_move(view, new_pos);
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_right){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
u32 flags = BoundryWhitespace;
|
||||
|
||||
Command_Parameter *end = param_stack_end(&command->part);
|
||||
Command_Parameter *param = param_stack_first(&command->part, end);
|
||||
for (; param < end; param = param_next(param, end)){
|
||||
int p = dynamic_to_int(¶m->param.param);
|
||||
switch (p){
|
||||
case par_flags:
|
||||
flags = dynamic_to_int(¶m->param.value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
i32 size = buffer_size(&file->state.buffer);
|
||||
i32 pos[4];
|
||||
for (i32 i = 0; i < ArrayCount(pos); ++i) pos[i] = size;
|
||||
|
||||
if (flags & (1)){
|
||||
pos[0] = buffer_seek_whitespace_right(&file->state.buffer, view->cursor.pos);
|
||||
}
|
||||
|
||||
if (flags & (1 << 1)){
|
||||
if (file->state.tokens_complete){
|
||||
pos[1] = seek_token_right(&file->state.token_stack, view->cursor.pos);
|
||||
}
|
||||
else{
|
||||
pos[1] = buffer_seek_whitespace_right(&file->state.buffer, view->cursor.pos);
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & (1 << 2)){
|
||||
pos[2] = buffer_seek_alphanumeric_right(&file->state.buffer, view->cursor.pos);
|
||||
if (flags & (1 << 3)){
|
||||
pos[3] = buffer_seek_range_camel_right(&file->state.buffer, view->cursor.pos, pos[2]);
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (flags & (1 << 3)){
|
||||
pos[3] = buffer_seek_alphanumeric_or_camel_right(&file->state.buffer, view->cursor.pos);
|
||||
}
|
||||
}
|
||||
|
||||
i32 new_pos = size;
|
||||
for (i32 i = 0; i < ArrayCount(pos); ++i){
|
||||
if (pos[i] < new_pos) new_pos = pos[i];
|
||||
}
|
||||
|
||||
view_cursor_move(view, new_pos);
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_whitespace_left){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
i32 pos = buffer_seek_whitespace_left(&file->state.buffer, view->cursor.pos);
|
||||
view_cursor_move(view, pos);
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_whitespace_up){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
i32 pos = buffer_seek_whitespace_up(&file->state.buffer, view->cursor.pos);
|
||||
view_cursor_move(view, pos);
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_whitespace_down){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
REQ_FILE(file, view);
|
||||
|
||||
i32 pos = buffer_seek_whitespace_down(&file->state.buffer, view->cursor.pos);
|
||||
view_cursor_move(view, pos);
|
||||
}
|
||||
|
||||
COMMAND_DECL(seek_token_left){
|
||||
ProfileMomentFunction();
|
||||
REQ_READABLE_VIEW(view);
|
||||
|
@ -1676,7 +1784,7 @@ COMMAND_DECL(command_line){
|
|||
}
|
||||
}break;
|
||||
|
||||
case par_cli_flags:
|
||||
case par_flags:
|
||||
{
|
||||
flags = (u32)dynamic_to_int(¶m->param.value);
|
||||
}break;
|
||||
|
@ -1814,6 +1922,8 @@ fill_buffer_summary(Buffer_Summary *buffer, Editing_File *file, Working_Set *wor
|
|||
|
||||
internal void
|
||||
fill_view_summary(View_Summary *view, View *vptr, Live_Views *live_set, Working_Set *working_set){
|
||||
i32 lock_level;
|
||||
int buffer_id;
|
||||
*view = {};
|
||||
|
||||
if (vptr->in_use){
|
||||
|
@ -1823,7 +1933,30 @@ fill_view_summary(View_Summary *view, View *vptr, Live_Views *live_set, Working_
|
|||
view->unwrapped_lines = vptr->unwrapped_lines;
|
||||
|
||||
if (vptr->file){
|
||||
view->buffer_id = (int)(vptr->file - working_set->files);
|
||||
lock_level = view_lock_level(vptr);
|
||||
buffer_id = (int)(vptr->file - working_set->files);
|
||||
|
||||
if (lock_level <= 0){
|
||||
view->buffer_id = buffer_id;
|
||||
}
|
||||
else{
|
||||
view->buffer_id = 0;
|
||||
}
|
||||
|
||||
if (lock_level <= 1){
|
||||
view->locked_buffer_id = buffer_id;
|
||||
}
|
||||
else{
|
||||
view->locked_buffer_id = 0;
|
||||
}
|
||||
|
||||
if (lock_level <= 2){
|
||||
view->hidden_buffer_id = buffer_id;
|
||||
}
|
||||
else{
|
||||
view->hidden_buffer_id = 0;
|
||||
}
|
||||
|
||||
view->mark = view_compute_cursor_from_pos(vptr, vptr->mark);
|
||||
view->cursor = vptr->cursor;
|
||||
view->preferred_x = vptr->preferred_x;
|
||||
|
@ -1938,13 +2071,15 @@ extern "C"{
|
|||
GET_ACTIVE_BUFFER_SIG(external_get_active_buffer){
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Buffer_Summary buffer = {};
|
||||
View *view = cmd->view;
|
||||
Editing_File *file;
|
||||
|
||||
file = cmd->view->file;
|
||||
|
||||
if (view_lock_level(view) <= LockLevel_Open){
|
||||
file = view->file;
|
||||
if (file){
|
||||
fill_buffer_summary(&buffer, file, &cmd->models->working_set);
|
||||
}
|
||||
}
|
||||
|
||||
return(buffer);
|
||||
}
|
||||
|
@ -1979,13 +2114,6 @@ extern "C"{
|
|||
return(buffer);
|
||||
}
|
||||
|
||||
REFRESH_BUFFER_SIG(external_refresh_buffer){
|
||||
int result;
|
||||
*buffer = external_get_buffer(app, buffer->buffer_id);
|
||||
result = buffer->exists;
|
||||
return(result);
|
||||
}
|
||||
|
||||
BUFFER_SEEK_DELIMITER_SIG(external_buffer_seek_delimiter){
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Editing_File *file;
|
||||
|
@ -2019,7 +2147,6 @@ extern "C"{
|
|||
}
|
||||
|
||||
BUFFER_SEEK_STRING_SIG(external_buffer_seek_string){
|
||||
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
App_Models *models;
|
||||
Editing_File *file;
|
||||
|
@ -2059,6 +2186,13 @@ extern "C"{
|
|||
return(result);
|
||||
}
|
||||
|
||||
REFRESH_BUFFER_SIG(external_refresh_buffer){
|
||||
int result;
|
||||
*buffer = external_get_buffer(app, buffer->buffer_id);
|
||||
result = buffer->exists;
|
||||
return(result);
|
||||
}
|
||||
|
||||
BUFFER_READ_RANGE_SIG(external_buffer_read_range){
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Editing_File *file;
|
||||
|
@ -2458,6 +2592,8 @@ setup_command_table(){
|
|||
|
||||
SET(null);
|
||||
SET(write_character);
|
||||
SET(seek_left);
|
||||
SET(seek_right);
|
||||
SET(seek_whitespace_right);
|
||||
SET(seek_whitespace_left);
|
||||
SET(seek_whitespace_up);
|
||||
|
@ -3657,69 +3793,6 @@ App_Step_Sig(app_step){
|
|||
|
||||
ProfileEnd(command_coroutine);
|
||||
|
||||
// NOTE(allen): command execution
|
||||
ProfileStart(command);
|
||||
if (!consumed_input[0] || !consumed_input[1]){
|
||||
b32 consumed_input2[2] = {0};
|
||||
|
||||
for (i32 key_i = 0; key_i < key_data.count; ++key_i){
|
||||
if (models->command_coroutine != 0) break;
|
||||
|
||||
switch (vars->state){
|
||||
case APP_STATE_EDIT:
|
||||
{
|
||||
Key_Event_Data key = get_single_key(&key_data, key_i);
|
||||
b32 hit_esc = (key.keycode == key_esc);
|
||||
cmd->key = key;
|
||||
|
||||
if (hit_esc || !consumed_input[0]){
|
||||
View *view = cmd->view;
|
||||
|
||||
Command_Map *map = 0;
|
||||
if (view) map = view->map;
|
||||
if (map == 0) map = &models->map_top;
|
||||
Command_Binding cmd_bind = map_extract_recursive(map, key);
|
||||
|
||||
if (cmd_bind.function){
|
||||
if (hit_esc){
|
||||
consumed_input2[1] = 1;
|
||||
}
|
||||
else{
|
||||
consumed_input2[0] = 1;
|
||||
}
|
||||
|
||||
Assert(models->command_coroutine == 0);
|
||||
Coroutine *command_coroutine = system->create_coroutine(command_caller);
|
||||
models->command_coroutine = command_coroutine;
|
||||
|
||||
Command_In cmd_in;
|
||||
cmd_in.cmd = cmd;
|
||||
cmd_in.bind = cmd_bind;
|
||||
|
||||
models->command_coroutine = system->launch_coroutine(models->command_coroutine,
|
||||
&cmd_in, models->command_coroutine_flags);
|
||||
models->prev_command = cmd_bind;
|
||||
app_result.redraw = 1;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
case APP_STATE_RESIZING:
|
||||
{
|
||||
if (key_data.count > 0){
|
||||
vars->state = APP_STATE_EDIT;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
consumed_input[0] |= consumed_input2[0];
|
||||
consumed_input[1] |= consumed_input2[1];
|
||||
}
|
||||
|
||||
update_command_data(vars, cmd);
|
||||
ProfileEnd(command);
|
||||
|
||||
// NOTE(allen): pass raw input to the panels
|
||||
ProfileStart(step);
|
||||
|
||||
|
@ -3784,6 +3857,69 @@ App_Step_Sig(app_step){
|
|||
update_command_data(vars, cmd);
|
||||
ProfileEnd(step);
|
||||
|
||||
// NOTE(allen): command execution
|
||||
ProfileStart(command);
|
||||
if (!consumed_input[0] || !consumed_input[1]){
|
||||
b32 consumed_input2[2] = {0};
|
||||
|
||||
for (i32 key_i = 0; key_i < key_data.count; ++key_i){
|
||||
if (models->command_coroutine != 0) break;
|
||||
|
||||
switch (vars->state){
|
||||
case APP_STATE_EDIT:
|
||||
{
|
||||
Key_Event_Data key = get_single_key(&key_data, key_i);
|
||||
b32 hit_esc = (key.keycode == key_esc);
|
||||
cmd->key = key;
|
||||
|
||||
if (hit_esc || !consumed_input[0]){
|
||||
View *view = cmd->view;
|
||||
|
||||
Command_Map *map = 0;
|
||||
if (view) map = view->map;
|
||||
if (map == 0) map = &models->map_top;
|
||||
Command_Binding cmd_bind = map_extract_recursive(map, key);
|
||||
|
||||
if (cmd_bind.function){
|
||||
if (hit_esc){
|
||||
consumed_input2[1] = 1;
|
||||
}
|
||||
else{
|
||||
consumed_input2[0] = 1;
|
||||
}
|
||||
|
||||
Assert(models->command_coroutine == 0);
|
||||
Coroutine *command_coroutine = system->create_coroutine(command_caller);
|
||||
models->command_coroutine = command_coroutine;
|
||||
|
||||
Command_In cmd_in;
|
||||
cmd_in.cmd = cmd;
|
||||
cmd_in.bind = cmd_bind;
|
||||
|
||||
models->command_coroutine = system->launch_coroutine(models->command_coroutine,
|
||||
&cmd_in, models->command_coroutine_flags);
|
||||
models->prev_command = cmd_bind;
|
||||
app_result.redraw = 1;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
case APP_STATE_RESIZING:
|
||||
{
|
||||
if (key_data.count > 0){
|
||||
vars->state = APP_STATE_EDIT;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
consumed_input[0] |= consumed_input2[0];
|
||||
consumed_input[1] |= consumed_input2[1];
|
||||
}
|
||||
|
||||
update_command_data(vars, cmd);
|
||||
ProfileEnd(command);
|
||||
|
||||
ProfileStart(resizing);
|
||||
// NOTE(allen): panel resizing
|
||||
switch (vars->state){
|
||||
|
|
|
@ -38,10 +38,11 @@
|
|||
#include "4ed_font_set.cpp"
|
||||
#include "4ed_rendering_helper.cpp"
|
||||
|
||||
#include "4ed_style.h"
|
||||
#include "4ed_style.cpp"
|
||||
#include "4ed_template.cpp"
|
||||
#include "4ed_exchange.cpp"
|
||||
#include "4ed_command.cpp"
|
||||
#include "4ed_style.cpp"
|
||||
#include "4ed_file.cpp"
|
||||
#include "4ed_gui.cpp"
|
||||
#include "4ed_layout.cpp"
|
||||
|
|
19
4ed_file.cpp
19
4ed_file.cpp
|
@ -9,6 +9,25 @@
|
|||
|
||||
// TOP
|
||||
|
||||
struct Interactive_Bar{
|
||||
f32 pos_x, pos_y;
|
||||
f32 text_shift_x, text_shift_y;
|
||||
i32_Rect rect;
|
||||
i16 font_id;
|
||||
};
|
||||
|
||||
internal void
|
||||
intbar_draw_string(Render_Target *target, Interactive_Bar *bar,
|
||||
String str, u32 char_color){
|
||||
i16 font_id = bar->font_id;
|
||||
|
||||
draw_string(target, font_id, str,
|
||||
(i32)(bar->pos_x + bar->text_shift_x),
|
||||
(i32)(bar->pos_y + bar->text_shift_y),
|
||||
char_color);
|
||||
bar->pos_x += font_string_width(target, font_id, str);
|
||||
}
|
||||
|
||||
#include "buffer/4coder_shared.cpp"
|
||||
|
||||
#if BUFFER_EXPERIMENT_SCALPEL == 0
|
||||
|
|
|
@ -2778,7 +2778,7 @@ theme_library_shit(System_Functions *system, Exchange *exchange,
|
|||
begin_row(ui.layout, 3);
|
||||
if (ui.state->style->name.size >= 1){
|
||||
if (do_button(-2, ui.state, ui.layout, "Save", 2)){
|
||||
style_library_add(ui.styles, ui.state->style);
|
||||
//style_library_add(ui.styles, ui.state->style);
|
||||
}
|
||||
}
|
||||
else{
|
||||
|
@ -2943,7 +2943,7 @@ theme_library_shit(System_Functions *system, Exchange *exchange,
|
|||
if (do_button(-2, ui.state, ui.layout, "Finish Import", 2)){
|
||||
Style *style = styles;
|
||||
for (i32 i = 0; i < style_count; ++i, ++style){
|
||||
if (import_check[i]) style_library_add(ui.styles, style);
|
||||
//if (import_check[i]) style_library_add(ui.styles, style);
|
||||
}
|
||||
view->color_mode = CV_Mode_Library;
|
||||
}
|
||||
|
|
125
4ed_metagen.cpp
125
4ed_metagen.cpp
|
@ -9,7 +9,8 @@
|
|||
|
||||
// TOP
|
||||
|
||||
#define ArrayCount(a) (sizeof(a)/sizeof(*a))
|
||||
#define FCPP_STRING_IMPLEMENTATION
|
||||
#include "4coder_string.h"
|
||||
|
||||
struct Struct_Field{
|
||||
char *type;
|
||||
|
@ -48,6 +49,11 @@ void struct_end(FILE *file){
|
|||
}
|
||||
|
||||
|
||||
void enum_begin(FILE *file, char *name){
|
||||
fprintf(file, "enum %s{\n", name);
|
||||
}
|
||||
|
||||
|
||||
char *keys_that_need_codes[] = {
|
||||
"back",
|
||||
"up",
|
||||
|
@ -318,6 +324,120 @@ char* generate_version(){
|
|||
return(filename);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
char* bar_style_fields[] = {
|
||||
"bar",
|
||||
"bar_active",
|
||||
"base",
|
||||
"pop1",
|
||||
"pop2",
|
||||
};
|
||||
|
||||
char* main_style_fields[] = {
|
||||
"back",
|
||||
"margin",
|
||||
"margin_hover",
|
||||
"margin_active",
|
||||
"cursor",
|
||||
"at_cursor",
|
||||
"highlight",
|
||||
"at_highlight",
|
||||
"mark",
|
||||
"default",
|
||||
"comment",
|
||||
"keyword",
|
||||
"str_constant",
|
||||
"char_constant",
|
||||
"int_constant",
|
||||
"float_constant",
|
||||
"bool_constant",
|
||||
"preproc",
|
||||
"include",
|
||||
"special_character",
|
||||
"highlight_junk",
|
||||
"highlight_white",
|
||||
"paste",
|
||||
"undo",
|
||||
"next_undo",
|
||||
};
|
||||
|
||||
static void
|
||||
do_style_tag(FILE *file, char *tag){
|
||||
int j, is_first;
|
||||
char *str_, c;
|
||||
String str;
|
||||
|
||||
str.memory_size = (int)strlen(tag);
|
||||
str_ = (char*)malloc(str.memory_size + 1);
|
||||
str = make_string(str_, 0, str.memory_size + 1);
|
||||
copy(&str, make_string(tag, str.memory_size));
|
||||
terminate_with_null(&str);
|
||||
|
||||
is_first = 1;
|
||||
for (j = 0; j < str.size; ++j){
|
||||
c = str.str[j];
|
||||
if (char_is_alpha_numeric_true(c)){
|
||||
if (is_first){
|
||||
is_first = 0;
|
||||
str.str[j] = char_to_upper(c);
|
||||
}
|
||||
}
|
||||
else{
|
||||
is_first = 1;
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(file, "Stag_%s,\n", str.str);
|
||||
|
||||
free(str.str);
|
||||
}
|
||||
|
||||
char* generate_style(){
|
||||
char *filename = "4coder_style.h & 4ed_style.h";
|
||||
char filename_4coder[] = "4coder_style.h";
|
||||
char filename_4ed[] = "4ed_style.h";
|
||||
FILE *file;
|
||||
int count, i;
|
||||
|
||||
file = fopen(filename_4coder, "wb");
|
||||
enum_begin(file, "Style_Tag");
|
||||
{
|
||||
count = ArrayCount(bar_style_fields);
|
||||
for (i = 0; i < count; ++i){
|
||||
do_style_tag(file, bar_style_fields[i]);
|
||||
}
|
||||
|
||||
count = ArrayCount(main_style_fields);
|
||||
for (i = 0; i < count; ++i){
|
||||
do_style_tag(file, main_style_fields[i]);
|
||||
}
|
||||
}
|
||||
struct_end(file);
|
||||
fclose(file);
|
||||
|
||||
file = fopen(filename_4ed, "wb");
|
||||
struct_begin(file, "Interactive_Style");
|
||||
{
|
||||
count = ArrayCount(bar_style_fields);
|
||||
for (i = 0; i < count; ++i){
|
||||
fprintf(file, "u32 %s_color;\n", bar_style_fields[i]);
|
||||
}
|
||||
}
|
||||
struct_end(file);
|
||||
|
||||
struct_begin(file, "Style_Main_Data");
|
||||
{
|
||||
count = ArrayCount(main_style_fields);
|
||||
for (i = 0; i < count; ++i){
|
||||
fprintf(file, "u32 %s_color;\n", main_style_fields[i]);
|
||||
}
|
||||
fprintf(file, "Interactive_Style file_info_style;\n");
|
||||
}
|
||||
struct_end(file);
|
||||
fclose(file);
|
||||
|
||||
return(filename);
|
||||
}
|
||||
|
||||
int main(){
|
||||
char *filename;
|
||||
|
@ -330,6 +450,9 @@ int main(){
|
|||
|
||||
filename = generate_version();
|
||||
printf("gen success: %s\n", filename);
|
||||
|
||||
filename = generate_style();
|
||||
printf("gen success: %s\n", filename);
|
||||
}
|
||||
|
||||
// BOTTOM
|
||||
|
|
132
4ed_style.cpp
132
4ed_style.cpp
|
@ -13,124 +13,17 @@
|
|||
// Font changing UI should be in the library menu now, it's not tied to the fonts any more
|
||||
// Get the import export stuff up and running for styles again
|
||||
|
||||
struct Interactive_Style{
|
||||
u32 bar_color;
|
||||
u32 bar_active_color;
|
||||
u32 base_color;
|
||||
u32 pop1_color;
|
||||
u32 pop2_color;
|
||||
};
|
||||
|
||||
struct Interactive_Bar{
|
||||
f32 pos_x, pos_y;
|
||||
f32 text_shift_x, text_shift_y;
|
||||
i32_Rect rect;
|
||||
i16 font_id;
|
||||
};
|
||||
|
||||
internal void
|
||||
intbar_draw_string(Render_Target *target, Interactive_Bar *bar,
|
||||
String str, u32 char_color){
|
||||
i16 font_id = bar->font_id;
|
||||
|
||||
draw_string(target, font_id, str,
|
||||
(i32)(bar->pos_x + bar->text_shift_x),
|
||||
(i32)(bar->pos_y + bar->text_shift_y),
|
||||
char_color);
|
||||
bar->pos_x += font_string_width(target, font_id, str);
|
||||
}
|
||||
|
||||
struct Style_Font{
|
||||
i16 font_id;
|
||||
i16 font_changed;
|
||||
};
|
||||
|
||||
struct Style_Main_Data{
|
||||
u32 back_color;
|
||||
u32 margin_color;
|
||||
u32 margin_hover_color;
|
||||
u32 margin_active_color;
|
||||
u32 cursor_color;
|
||||
u32 at_cursor_color;
|
||||
u32 highlight_color;
|
||||
u32 at_highlight_color;
|
||||
u32 mark_color;
|
||||
u32 default_color;
|
||||
u32 comment_color;
|
||||
u32 keyword_color;
|
||||
u32 str_constant_color;
|
||||
u32 char_constant_color;
|
||||
u32 int_constant_color;
|
||||
u32 float_constant_color;
|
||||
u32 bool_constant_color;
|
||||
u32 preproc_color;
|
||||
u32 include_color;
|
||||
u32 special_character_color;
|
||||
u32 highlight_junk_color;
|
||||
u32 highlight_white_color;
|
||||
u32 paste_color;
|
||||
u32 undo_color;
|
||||
Interactive_Style file_info_style;
|
||||
};
|
||||
|
||||
enum Style_Tag{
|
||||
Stag_Bar,
|
||||
Stag_Bar_Active,
|
||||
Stag_Bar_Base,
|
||||
Stag_Bar_Pop1,
|
||||
Stag_Bar_Pop2,
|
||||
Stag_Back,
|
||||
Stag_Margin,
|
||||
Stag_Margin_Hover,
|
||||
Stag_Margin_Active,
|
||||
Stag_Cursor,
|
||||
Stag_At_Cursor,
|
||||
Stag_Highlight,
|
||||
Stag_At_Highlight,
|
||||
Stag_Mark,
|
||||
Stag_Default,
|
||||
Stag_Comment,
|
||||
Stag_Keyword,
|
||||
Stag_Str_Constant,
|
||||
Stag_Char_Constant,
|
||||
Stag_Int_Constant,
|
||||
Stag_Float_Constant,
|
||||
Stag_Bool_Constant,
|
||||
Stag_Preproc,
|
||||
Stag_Include,
|
||||
Stag_Special_Character,
|
||||
Stag_Highlight_Junk,
|
||||
Stag_Highlight_White,
|
||||
Stag_Paste,
|
||||
Stag_Undo,
|
||||
Stag_Next_Undo,
|
||||
// never below this
|
||||
Stag_Count
|
||||
};
|
||||
|
||||
struct Style_Color_Specifier{
|
||||
u32 tag;
|
||||
u32 color;
|
||||
};
|
||||
|
||||
struct Style_File_Format{
|
||||
i32 name_size;
|
||||
char name[24];
|
||||
|
||||
i32 color_specifier_count;
|
||||
};
|
||||
|
||||
struct Style{
|
||||
char name_[24];
|
||||
String name;
|
||||
Style_Main_Data main;
|
||||
};
|
||||
|
||||
struct Style_Library{
|
||||
Style styles[64];
|
||||
i32 count, max;
|
||||
};
|
||||
|
||||
internal void
|
||||
style_copy(Style *dst, Style *src){
|
||||
*dst = *src;
|
||||
|
@ -151,9 +44,9 @@ style_index_by_tag(Style *s, u32 tag){
|
|||
switch (tag){
|
||||
case Stag_Bar: result = &s->main.file_info_style.bar_color; break;
|
||||
case Stag_Bar_Active: result = &s->main.file_info_style.bar_active_color; break;
|
||||
case Stag_Bar_Base: result = &s->main.file_info_style.base_color; break;
|
||||
case Stag_Bar_Pop1: result = &s->main.file_info_style.pop1_color; break;
|
||||
case Stag_Bar_Pop2: result = &s->main.file_info_style.pop2_color; break;
|
||||
case Stag_Base: result = &s->main.file_info_style.base_color; break;
|
||||
case Stag_Pop1: result = &s->main.file_info_style.pop1_color; break;
|
||||
case Stag_Pop2: result = &s->main.file_info_style.pop2_color; break;
|
||||
|
||||
case Stag_Back: result = &s->main.back_color; break;
|
||||
case Stag_Margin: result = &s->main.margin_color; break;
|
||||
|
@ -189,6 +82,24 @@ style_index_by_tag(Style *s, u32 tag){
|
|||
return result;
|
||||
}
|
||||
|
||||
struct Style_Library{
|
||||
Style styles[64];
|
||||
i32 count, max;
|
||||
};
|
||||
|
||||
#if 0
|
||||
struct Style_Color_Specifier{
|
||||
u32 tag;
|
||||
u32 color;
|
||||
};
|
||||
|
||||
struct Style_File_Format{
|
||||
i32 name_size;
|
||||
char name[24];
|
||||
|
||||
i32 color_specifier_count;
|
||||
};
|
||||
|
||||
internal b32
|
||||
style_library_add(Style_Library *library, Style *style){
|
||||
b32 result = 0;
|
||||
|
@ -234,6 +145,7 @@ style_format_for_file(Font_Set *set, Style *style, Style_File_Format *out){
|
|||
|
||||
return (Style_File_Format*)spec;
|
||||
}
|
||||
#endif
|
||||
|
||||
// BOTTOM
|
||||
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
struct Interactive_Style{
|
||||
u32 bar_color;
|
||||
u32 bar_active_color;
|
||||
u32 base_color;
|
||||
u32 pop1_color;
|
||||
u32 pop2_color;
|
||||
};
|
||||
|
||||
struct Style_Main_Data{
|
||||
u32 back_color;
|
||||
u32 margin_color;
|
||||
u32 margin_hover_color;
|
||||
u32 margin_active_color;
|
||||
u32 cursor_color;
|
||||
u32 at_cursor_color;
|
||||
u32 highlight_color;
|
||||
u32 at_highlight_color;
|
||||
u32 mark_color;
|
||||
u32 default_color;
|
||||
u32 comment_color;
|
||||
u32 keyword_color;
|
||||
u32 str_constant_color;
|
||||
u32 char_constant_color;
|
||||
u32 int_constant_color;
|
||||
u32 float_constant_color;
|
||||
u32 bool_constant_color;
|
||||
u32 preproc_color;
|
||||
u32 include_color;
|
||||
u32 special_character_color;
|
||||
u32 highlight_junk_color;
|
||||
u32 highlight_white_color;
|
||||
u32 paste_color;
|
||||
u32 undo_color;
|
||||
u32 next_undo_color;
|
||||
Interactive_Style file_info_style;
|
||||
};
|
||||
|
Loading…
Reference in New Issue