fixed small issues discovered after 4.0.21 release
parent
9564dbe25d
commit
7a94942242
|
@ -11,6 +11,7 @@ struct Application_Links;
|
|||
#define GET_BUFFER_NEXT_SIG(n) void n(Application_Links *app, Buffer_Summary *buffer, Access_Flag access)
|
||||
#define GET_BUFFER_SIG(n) Buffer_Summary n(Application_Links *app, Buffer_ID buffer_id, Access_Flag access)
|
||||
#define GET_BUFFER_BY_NAME_SIG(n) Buffer_Summary n(Application_Links *app, char *name, int32_t len, Access_Flag access)
|
||||
#define GET_BUFFER_BY_FILE_NAME_SIG(n) Buffer_Summary n(Application_Links *app, char *name, int32_t len, Access_Flag access)
|
||||
#define BUFFER_READ_RANGE_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, int32_t start, int32_t end, char *out)
|
||||
#define BUFFER_REPLACE_RANGE_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, int32_t start, int32_t end, char *str, int32_t len)
|
||||
#define BUFFER_COMPUTE_CURSOR_SIG(n) bool32 n(Application_Links *app, Buffer_Summary *buffer, Buffer_Seek seek, Partial_Cursor *cursor_out)
|
||||
|
@ -88,6 +89,7 @@ typedef GET_BUFFER_FIRST_SIG(Get_Buffer_First_Function);
|
|||
typedef GET_BUFFER_NEXT_SIG(Get_Buffer_Next_Function);
|
||||
typedef GET_BUFFER_SIG(Get_Buffer_Function);
|
||||
typedef GET_BUFFER_BY_NAME_SIG(Get_Buffer_By_Name_Function);
|
||||
typedef GET_BUFFER_BY_FILE_NAME_SIG(Get_Buffer_By_File_Name_Function);
|
||||
typedef BUFFER_READ_RANGE_SIG(Buffer_Read_Range_Function);
|
||||
typedef BUFFER_REPLACE_RANGE_SIG(Buffer_Replace_Range_Function);
|
||||
typedef BUFFER_COMPUTE_CURSOR_SIG(Buffer_Compute_Cursor_Function);
|
||||
|
@ -167,6 +169,7 @@ Get_Buffer_First_Function *get_buffer_first;
|
|||
Get_Buffer_Next_Function *get_buffer_next;
|
||||
Get_Buffer_Function *get_buffer;
|
||||
Get_Buffer_By_Name_Function *get_buffer_by_name;
|
||||
Get_Buffer_By_File_Name_Function *get_buffer_by_file_name;
|
||||
Buffer_Read_Range_Function *buffer_read_range;
|
||||
Buffer_Replace_Range_Function *buffer_replace_range;
|
||||
Buffer_Compute_Cursor_Function *buffer_compute_cursor;
|
||||
|
@ -245,6 +248,7 @@ Get_Buffer_First_Function *get_buffer_first_;
|
|||
Get_Buffer_Next_Function *get_buffer_next_;
|
||||
Get_Buffer_Function *get_buffer_;
|
||||
Get_Buffer_By_Name_Function *get_buffer_by_name_;
|
||||
Get_Buffer_By_File_Name_Function *get_buffer_by_file_name_;
|
||||
Buffer_Read_Range_Function *buffer_read_range_;
|
||||
Buffer_Replace_Range_Function *buffer_replace_range_;
|
||||
Buffer_Compute_Cursor_Function *buffer_compute_cursor_;
|
||||
|
@ -331,6 +335,7 @@ app_links->get_buffer_first_ = Get_Buffer_First;\
|
|||
app_links->get_buffer_next_ = Get_Buffer_Next;\
|
||||
app_links->get_buffer_ = Get_Buffer;\
|
||||
app_links->get_buffer_by_name_ = Get_Buffer_By_Name;\
|
||||
app_links->get_buffer_by_file_name_ = Get_Buffer_By_File_Name;\
|
||||
app_links->buffer_read_range_ = Buffer_Read_Range;\
|
||||
app_links->buffer_replace_range_ = Buffer_Replace_Range;\
|
||||
app_links->buffer_compute_cursor_ = Buffer_Compute_Cursor;\
|
||||
|
@ -409,6 +414,7 @@ static inline Buffer_Summary get_buffer_first(Application_Links *app, Access_Fla
|
|||
static inline void get_buffer_next(Application_Links *app, Buffer_Summary *buffer, Access_Flag access){(app->get_buffer_next(app, buffer, access));}
|
||||
static inline Buffer_Summary get_buffer(Application_Links *app, Buffer_ID buffer_id, Access_Flag access){return(app->get_buffer(app, buffer_id, access));}
|
||||
static inline Buffer_Summary get_buffer_by_name(Application_Links *app, char *name, int32_t len, Access_Flag access){return(app->get_buffer_by_name(app, name, len, access));}
|
||||
static inline Buffer_Summary get_buffer_by_file_name(Application_Links *app, char *name, int32_t len, Access_Flag access){return(app->get_buffer_by_file_name(app, name, len, access));}
|
||||
static inline bool32 buffer_read_range(Application_Links *app, Buffer_Summary *buffer, int32_t start, int32_t end, char *out){return(app->buffer_read_range(app, buffer, start, end, out));}
|
||||
static inline bool32 buffer_replace_range(Application_Links *app, Buffer_Summary *buffer, int32_t start, int32_t end, char *str, int32_t len){return(app->buffer_replace_range(app, buffer, start, end, str, len));}
|
||||
static inline bool32 buffer_compute_cursor(Application_Links *app, Buffer_Summary *buffer, Buffer_Seek seek, Partial_Cursor *cursor_out){return(app->buffer_compute_cursor(app, buffer, seek, cursor_out));}
|
||||
|
@ -487,6 +493,7 @@ static inline Buffer_Summary get_buffer_first(Application_Links *app, Access_Fla
|
|||
static inline void get_buffer_next(Application_Links *app, Buffer_Summary *buffer, Access_Flag access){(app->get_buffer_next_(app, buffer, access));}
|
||||
static inline Buffer_Summary get_buffer(Application_Links *app, Buffer_ID buffer_id, Access_Flag access){return(app->get_buffer_(app, buffer_id, access));}
|
||||
static inline Buffer_Summary get_buffer_by_name(Application_Links *app, char *name, int32_t len, Access_Flag access){return(app->get_buffer_by_name_(app, name, len, access));}
|
||||
static inline Buffer_Summary get_buffer_by_file_name(Application_Links *app, char *name, int32_t len, Access_Flag access){return(app->get_buffer_by_file_name_(app, name, len, access));}
|
||||
static inline bool32 buffer_read_range(Application_Links *app, Buffer_Summary *buffer, int32_t start, int32_t end, char *out){return(app->buffer_read_range_(app, buffer, start, end, out));}
|
||||
static inline bool32 buffer_replace_range(Application_Links *app, Buffer_Summary *buffer, int32_t start, int32_t end, char *str, int32_t len){return(app->buffer_replace_range_(app, buffer, start, end, str, len));}
|
||||
static inline bool32 buffer_compute_cursor(Application_Links *app, Buffer_Summary *buffer, Buffer_Seek seek, Partial_Cursor *cursor_out){return(app->buffer_compute_cursor_(app, buffer, seek, cursor_out));}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#define MAJOR 4
|
||||
#define MINOR 0
|
||||
#define PATCH 21
|
||||
#define PATCH 22
|
||||
|
||||
// string
|
||||
#define VN__(a,b,c) #a"."#b"."#c
|
||||
|
|
|
@ -104,8 +104,7 @@ make_batch_from_indent_marks(Application_Links *app, Partition *part, Buffer_Sum
|
|||
|
||||
for (int32_t line_i = line_start; line_i < line_end; ++line_i){
|
||||
int32_t line_start_pos = buffer_get_line_start(app, buffer, line_i);
|
||||
Hard_Start_Result hard_start =
|
||||
buffer_find_hard_start(app, buffer, line_start_pos, opts.tab_width);
|
||||
Hard_Start_Result hard_start = buffer_find_hard_start(app, buffer, line_start_pos, opts.tab_width);
|
||||
|
||||
int32_t correct_indentation = indent_marks[line_i];
|
||||
if (hard_start.all_whitespace && opts.empty_blank_lines){
|
||||
|
@ -158,8 +157,7 @@ make_batch_from_indent_marks(Application_Links *app, Partition *part, Buffer_Sum
|
|||
|
||||
static void
|
||||
set_line_indents(Application_Links *app, Partition *part, Buffer_Summary *buffer, int32_t line_start, int32_t line_end, int32_t *indent_marks, Indent_Options opts){
|
||||
Buffer_Batch_Edit batch =
|
||||
make_batch_from_indent_marks(app, part, buffer, line_start, line_end, indent_marks, opts);
|
||||
Buffer_Batch_Edit batch = make_batch_from_indent_marks(app, part, buffer, line_start, line_end, indent_marks, opts);
|
||||
|
||||
if (batch.edit_count > 0){
|
||||
buffer_batch_edit(app, buffer, batch.str, batch.str_len, batch.edits, batch.edit_count, BatchEdit_PreserveTokens);
|
||||
|
@ -252,27 +250,29 @@ find_anchor_token(Application_Links *app, Buffer_Summary *buffer, Cpp_Token_Arra
|
|||
}
|
||||
out_of_loop2:;
|
||||
|
||||
Cpp_Token_Type open_type = CPP_TOKEN_JUNK;
|
||||
Cpp_Token_Type close_type = CPP_TOKEN_JUNK;
|
||||
switch (close){
|
||||
case 0: token = start_token; found_safe_start_position = 1; break;
|
||||
case 0: token = start_token; found_safe_start_position = true; break;
|
||||
|
||||
case CPP_TOKEN_PARENTHESE_CLOSE:
|
||||
token = seek_matching_token_backwards(tokens, token-1,
|
||||
CPP_TOKEN_PARENTHESE_OPEN,
|
||||
CPP_TOKEN_PARENTHESE_CLOSE);
|
||||
open_type = CPP_TOKEN_PARENTHESE_OPEN;
|
||||
close_type = CPP_TOKEN_PARENTHESE_CLOSE;
|
||||
break;
|
||||
|
||||
case CPP_TOKEN_BRACKET_CLOSE:
|
||||
token = seek_matching_token_backwards(tokens, token-1,
|
||||
CPP_TOKEN_BRACKET_OPEN,
|
||||
CPP_TOKEN_BRACKET_CLOSE);
|
||||
open_type = CPP_TOKEN_BRACKET_OPEN;
|
||||
close_type = CPP_TOKEN_BRACKET_CLOSE;
|
||||
break;
|
||||
|
||||
case CPP_TOKEN_BRACE_CLOSE:
|
||||
token = seek_matching_token_backwards(tokens, token-1,
|
||||
CPP_TOKEN_BRACE_OPEN,
|
||||
CPP_TOKEN_BRACE_CLOSE);
|
||||
open_type = CPP_TOKEN_BRACE_OPEN;
|
||||
close_type = CPP_TOKEN_BRACE_CLOSE;
|
||||
break;
|
||||
}
|
||||
if (open_type != CPP_TOKEN_JUNK){
|
||||
token = seek_matching_token_backwards(tokens, token-1, open_type, close_type);
|
||||
}
|
||||
}
|
||||
} while(found_safe_start_position == 0);
|
||||
*current_indent_out = current_indent;
|
||||
|
|
|
@ -1047,14 +1047,14 @@ default_4coder_side_by_side_panels(Application_Links *app, char **command_line_f
|
|||
Buffer_Identifier right = buffer_identifier(literal("*messages*"));
|
||||
|
||||
if (file_count > 0){
|
||||
char *name = command_line_files[0];
|
||||
int32_t len = str_size(name);
|
||||
left = buffer_identifier(name, len);
|
||||
char *left_name = command_line_files[0];
|
||||
int32_t left_len = str_size(name);
|
||||
left = buffer_identifier(left_name, left_len);
|
||||
|
||||
if (file_count > 1){
|
||||
char *name = command_line_files[1];
|
||||
int32_t len = str_size(name);
|
||||
right = buffer_identifier(name, len);
|
||||
char *right_name = command_line_files[1];
|
||||
int32_t right_len = str_size(name);
|
||||
right = buffer_identifier(right_name, right_len);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -178,19 +178,6 @@ buffer_identifier(Buffer_ID id){
|
|||
return(identifier);
|
||||
}
|
||||
|
||||
static Buffer_ID
|
||||
buffer_identifier_to_id(Application_Links *app, Buffer_Identifier identifier){
|
||||
Buffer_ID id = 0;
|
||||
if (identifier.id != 0){
|
||||
id = identifier.id;
|
||||
}
|
||||
else{
|
||||
Buffer_Summary buffer = get_buffer_by_name(app, identifier.name, identifier.name_len, AccessAll);
|
||||
id = buffer.buffer_id;
|
||||
}
|
||||
return(id);
|
||||
}
|
||||
|
||||
static Buffer_Summary
|
||||
create_buffer(Application_Links *app, char *filename, int32_t filename_len, Buffer_Create_Flag flags){
|
||||
Buffer_Summary buffer = {0};
|
||||
|
@ -346,6 +333,23 @@ open_file(Application_Links *app, Buffer_Summary *buffer_out, char *filename, in
|
|||
return(result);
|
||||
}
|
||||
|
||||
static Buffer_ID
|
||||
buffer_identifier_to_id(Application_Links *app, Buffer_Identifier identifier){
|
||||
Buffer_ID id = 0;
|
||||
if (identifier.id != 0){
|
||||
id = identifier.id;
|
||||
}
|
||||
else{
|
||||
Buffer_Summary buffer = get_buffer_by_name(app, identifier.name, identifier.name_len, AccessAll);
|
||||
id = buffer.buffer_id;
|
||||
if (id == 0){
|
||||
buffer = get_buffer_by_file_name(app, identifier.name, identifier.name_len, AccessAll);
|
||||
id = buffer.buffer_id;
|
||||
}
|
||||
}
|
||||
return(id);
|
||||
}
|
||||
|
||||
static bool32
|
||||
view_open_file(Application_Links *app, View_Summary *view, char *filename, int32_t filename_len, bool32 never_new){
|
||||
bool32 result = false;
|
||||
|
|
|
@ -513,14 +513,14 @@ DOC_SEE(get_buffer_next)
|
|||
*/{
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Working_Set *working_set = &cmd->models->working_set;
|
||||
Buffer_Summary result = {};
|
||||
Buffer_Summary buffer = {0};
|
||||
|
||||
internal_get_buffer_first(working_set, &result);
|
||||
while (result.exists && !access_test(result.lock_flags, access)){
|
||||
internal_get_buffer_next(working_set, &result);
|
||||
internal_get_buffer_first(working_set, &buffer);
|
||||
while (buffer.exists && !access_test(buffer.lock_flags, access)){
|
||||
internal_get_buffer_next(working_set, &buffer);
|
||||
}
|
||||
|
||||
return(result);
|
||||
return(buffer);
|
||||
}
|
||||
|
||||
API_EXPORT void
|
||||
|
@ -560,10 +560,10 @@ DOC_SEE(Buffer_ID)
|
|||
*/{
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Working_Set *working_set = &cmd->models->working_set;
|
||||
Buffer_Summary buffer = {};
|
||||
Buffer_Summary buffer = {0};
|
||||
|
||||
Editing_File *file = working_set_get_active_file(working_set, buffer_id);
|
||||
if (file != 0){
|
||||
if (file != 0 && !file->is_dummy){
|
||||
fill_buffer_summary(&buffer, file, working_set);
|
||||
if (!access_test(buffer.lock_flags, access)){
|
||||
buffer = null_buffer_summary;
|
||||
|
@ -584,11 +584,32 @@ DOC_SEE(Buffer_Summary)
|
|||
DOC_SEE(Access_Flag)
|
||||
*/{
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Buffer_Summary buffer = {};
|
||||
Buffer_Summary buffer = {0};
|
||||
Working_Set *working_set = &cmd->models->working_set;
|
||||
|
||||
Editing_File *file = working_set_name_contains(working_set, make_string(name, len));
|
||||
if (file && !file->is_dummy){
|
||||
if (file != 0 && !file->is_dummy){
|
||||
fill_buffer_summary(&buffer, file, working_set);
|
||||
if (!access_test(buffer.lock_flags, access)){
|
||||
buffer = null_buffer_summary;
|
||||
}
|
||||
}
|
||||
|
||||
return(buffer);
|
||||
}
|
||||
|
||||
API_EXPORT Buffer_Summary
|
||||
Get_Buffer_By_File_Name(Application_Links *app, char *name, int32_t len, Access_Flag access){
|
||||
Command_Data *cmd = (Command_Data*)app->cmd_context;
|
||||
Buffer_Summary buffer = {0};
|
||||
System_Functions *system = cmd->system;
|
||||
Models *models = cmd->models;
|
||||
Working_Set *working_set = &models->working_set;
|
||||
|
||||
String fname = make_string(name, len);
|
||||
Editing_File_Canon_Name canon = {0};
|
||||
if (get_canon_name(system, &canon, fname)){
|
||||
Editing_File *file = working_set_canon_contains(working_set, canon.name);
|
||||
fill_buffer_summary(&buffer, file, working_set);
|
||||
if (!access_test(buffer.lock_flags, access)){
|
||||
buffer = null_buffer_summary;
|
||||
|
@ -1238,7 +1259,7 @@ End_Buffer_Creation(Application_Links *app, Buffer_Creation_Data *data)
|
|||
/*
|
||||
DOC_PARAM(data, a local user handle for buffer creation that has already been initialized by begin_buffer_creation and used in subsequent buffer creation flags)
|
||||
|
||||
DOC_RETURN(returns a summary of the newly created buffer or of the existing buffer that already has the specified name. If there is not enough creation data to make the buffer the returned summary will be null.)
|
||||
DOC_RETURN(Returns a summary of the newly created buffer or of the existing buffer that already has the specified name. If there is not enough creation data to make the buffer the returned summary will be null.)
|
||||
|
||||
DOC_SEE(begin_buffer_creation)
|
||||
*/{
|
||||
|
@ -1253,11 +1274,11 @@ DOC_SEE(begin_buffer_creation)
|
|||
|
||||
Buffer_Summary result = {0};
|
||||
|
||||
if (data && data->fname_len > 0){
|
||||
if (data != 0 && data->fname_len > 0){
|
||||
String fname = make_string(data->fname_space, data->fname_len);
|
||||
|
||||
Editing_File *file = 0;
|
||||
b32 do_new_file = 0;
|
||||
b32 do_new_file = false;
|
||||
Plat_Handle handle = {0};
|
||||
|
||||
Temp_Memory temp = begin_temp_memory(part);
|
||||
|
@ -1267,23 +1288,23 @@ DOC_SEE(begin_buffer_creation)
|
|||
file = working_set_canon_contains(working_set, canon.name);
|
||||
}
|
||||
else{
|
||||
do_new_file = 1;
|
||||
do_new_file = true;
|
||||
}
|
||||
|
||||
if (!file){
|
||||
if (file == 0){
|
||||
file = working_set_name_contains(working_set, fname);
|
||||
}
|
||||
|
||||
u32 flags = data->flags;
|
||||
|
||||
if (!file){
|
||||
if (file == 0){
|
||||
if (!do_new_file){
|
||||
if (flags & BufferCreate_AlwaysNew){
|
||||
do_new_file = 1;
|
||||
do_new_file = true;
|
||||
}
|
||||
else{
|
||||
if (!system->load_handle(canon.name.str, &handle)){
|
||||
do_new_file = 1;
|
||||
do_new_file = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1292,13 +1313,13 @@ DOC_SEE(begin_buffer_creation)
|
|||
Assert(!handle_equal(handle, null_plat_handle));
|
||||
|
||||
i32 size = system->load_size(handle);
|
||||
b32 in_general_mem = 0;
|
||||
b32 in_general_mem = false;
|
||||
char *buffer = push_array(part, char, size);
|
||||
|
||||
if (buffer == 0){
|
||||
buffer = (char*)general_memory_allocate(general, size);
|
||||
Assert(buffer != 0);
|
||||
in_general_mem = 1;
|
||||
in_general_mem = true;
|
||||
}
|
||||
|
||||
if (system->load_file(handle, buffer, size)){
|
||||
|
|
|
@ -19,16 +19,12 @@ non-infringement.
|
|||
The following parts of the Software are separately licensed as follows:
|
||||
|
||||
- The Liberation font family is licensed under the SIL Open Font License (version 2 onwards).
|
||||
The full text of this license is available in the accompanying 3rdparty/sil.txt file
|
||||
|
||||
- The Hack font family is licensed under the a modified SIL license
|
||||
The full text of this license is available in the accompanying 3rdparty/hacksil.txt file
|
||||
|
||||
- The Inconsolata font family is licensed under the SIL Open Font License
|
||||
Copyright (c) 2011, Raph Levien (firstname.lastname@gmail.com), Copyright (c) 2012, Cyreal (cyreal.org)
|
||||
The full text of this license is available in the accompanying 3rdpart/sil.txt
|
||||
Copyright (c) 2011, Raph Levien (raph.levien@gmail.com), Copyright (c) 2012, Cyreal (cyreal.org)
|
||||
|
||||
- The Cutive font family is licensed under the SIL Open Font License
|
||||
Copyright (c) 2012 by vernon adams (vern@newtypography.co.uk)
|
||||
The full text of this license is available in the accompanying 3rdpart/sil.txt
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -1,2 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
|
@ -15,6 +15,10 @@ Extending your project with a project.4coder file:
|
|||
|
||||
\VIDEO{youtube:https://www.youtube.com/embed/iZLtS3IoatE}
|
||||
|
||||
Using customizable keywords in the 4coder custom API:
|
||||
|
||||
\VIDEO{youtube:https://www.youtube.com/watch?v=qoEvc4uC9Uw}
|
||||
|
||||
More tutorials coming soon.
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue