sketch out symbol lister view; float fuzzy matching code into base string layer; bugfix unnecessary ui layer view clamping

This commit is contained in:
Ryan Fleury
2024-01-30 07:59:24 -08:00
parent 38af1a5cab
commit c9b22acd5a
12 changed files with 257 additions and 87 deletions
+39
View File
@@ -1657,6 +1657,45 @@ rgba_from_hex_string_4f32(String8 hex_string)
return rgba;
}
////////////////////////////////
//~ rjf: String Fuzzy Matching
internal FuzzyMatchRangeList
fuzzy_match_find(Arena *arena, String8List needles, String8 haystack)
{
FuzzyMatchRangeList result = {0};
for(String8Node *needle_n = needles.first; needle_n != 0; needle_n = needle_n->next)
{
U64 find_pos = 0;
for(;find_pos < haystack.size;)
{
find_pos = str8_find_needle(haystack, find_pos, needle_n->string, StringMatchFlag_CaseInsensitive);
B32 is_in_gathered_ranges = 0;
for(FuzzyMatchRangeNode *n = result.first; n != 0; n = n->next)
{
if(n->range.min <= find_pos && find_pos < n->range.max)
{
is_in_gathered_ranges = 1;
find_pos = n->range.max;
break;
}
}
if(!is_in_gathered_ranges)
{
break;
}
}
if(find_pos < haystack.size)
{
Rng1U64 range = r1u64(find_pos, find_pos+needle_n->string.size);
FuzzyMatchRangeNode *n = push_array(arena, FuzzyMatchRangeNode, 1);
n->range = range;
SLLQueuePush(result.first, result.last, n);
result.count += 1;
}
}
return result;
}
////////////////////////////////
//~ NOTE(allen): Serialization Helpers
+23
View File
@@ -128,6 +128,24 @@ struct UnicodeDecode
U32 codepoint;
};
////////////////////////////////
//~ rjf: String Fuzzy Matching Types
typedef struct FuzzyMatchRangeNode FuzzyMatchRangeNode;
struct FuzzyMatchRangeNode
{
FuzzyMatchRangeNode *next;
Rng1U64 range;
};
typedef struct FuzzyMatchRangeList FuzzyMatchRangeList;
struct FuzzyMatchRangeList
{
FuzzyMatchRangeNode *first;
FuzzyMatchRangeNode *last;
U64 count;
};
////////////////////////////////
//~ rjf: Character Classification & Conversion Functions
@@ -318,6 +336,11 @@ internal String8 string_from_elapsed_time(Arena *arena, DateTime dt);
internal String8 hex_string_from_rgba_4f32(Arena *arena, Vec4F32 rgba);
internal Vec4F32 rgba_from_hex_string_4f32(String8 hex_string);
////////////////////////////////
//~ rjf: String Fuzzy Matching
internal FuzzyMatchRangeList fuzzy_match_find(Arena *arena, String8List needles, String8 haystack);
////////////////////////////////
//~ NOTE(allen): Serialization Helpers