Files
metadesk/source/base/text.c
T
ed 0ab226f739 adding prefixes to source
They'll be removed on demand in libgen repo
2025-02-12 14:40:11 -05:00

55 lines
1.4 KiB
C

#ifdef INTELLISENSE_DIRECTIVES
# include "text.h"
#endif
////////////////////////////////
//~ rjf: Text Path Helpers
MD_String8TxtPtPair
md_str8_txt_pt_pair_from_string(MD_String8 string)
{
MD_String8TxtPtPair pair = {0};
{
MD_String8 file_part = {0};
MD_String8 line_part = {0};
MD_String8 col_part = {0};
// rjf: grab file part
for(MD_U64 idx = 0; idx <= string.size; idx += 1)
{
MD_U8 byte = (idx < string.size) ? (string.str[idx ]) : 0;
MD_U8 next_byte = ((idx + 1 < string.size) ? (string.str[idx + 1]) : 0);
if(byte == ':' && next_byte != '/' && next_byte != '\\') {
file_part = md_str8_prefix(string, idx);
line_part = md_str8_skip(string, idx+1);
break;
}
else if(byte == 0) {
file_part = string;
break;
}
}
// rjf: grab line/column
{
MD_U64 colon_pos = md_str8_find_needle(line_part, 0, md_str8_lit(":"), 0);
if(colon_pos < line_part.size) {
col_part = md_str8_skip (line_part, colon_pos + 1);
line_part = md_str8_prefix(line_part, colon_pos);
}
}
// rjf: convert line/column strings to numerics
MD_U64 line = 0;
MD_U64 column = 0;
md_try_u64_from_str8_c_rules(line_part, &line);
md_try_u64_from_str8_c_rules(col_part, &column);
// rjf: fill
pair.string = file_part;
pair.pt = md_txt_pt((MD_S64)line, (MD_S64)column);
if(pair.pt.line == 0) { pair.pt.line = 1; }
if(pair.pt.column == 0) { pair.pt.column = 1; }
}
return pair;
}