diff --git a/docs/md_docs.md b/docs/md_docs.md index 85a6cc2..12db2f5 100644 --- a/docs/md_docs.md +++ b/docs/md_docs.md @@ -1,26 +1,32 @@ //////////////////////////////// //~ Basic Unicode string types. +@doc("A pointer and size representing a UTF-8 string. Also used for any range of untyped data range.") +@see(MD_String8List) @struct MD_String8: { str: *MD_u8, size: MD_u64, }; +@doc("A pointer and size representing a UTF-16 string.") @struct MD_String16: { str: *MD_u16, size: MD_u64, }; +@doc("A pointer and size representing a UTF-32 string.") @struct MD_String32: { str: *MD_u32, size: MD_u64, }; +@doc("A node in an MD_String8List") @struct MD_String8Node: { - next: MD_String8Node, + next: *MD_String8Node, string: MD_String8, }; +@doc("A list of multiple possibly discontiguous strings (in MD_String8). Stored as a singly linked list.") @struct MD_String8List: { node_count: MD_u64, total_size: MD_u64, @@ -28,11 +34,15 @@ last: *MD_String8Node, }; +@doc("Controls matching rules in routines that perform string matching.") @prefix(MD_StringMatchFlag) @base_type(MD_u32) @flags MD_StringMatchFlags: { + @doc("Consider lower case letters equivalent to upper case equivalents in the ASCII range.") CaseInsensitive, + @doc("Do not require the strings to be the same length. If one of the strings is a prefix of another, the two strings will count as a match.") RightSideSloppy, + @doc("On string ") FindLast, SlashInsensitive, }; @@ -482,13 +492,6 @@ return: MD_u64, }; -@func MD_FindLastSubstring: { - str: MD_String8, - substring: MD_String8, - flags: MD_StringMatchFlags, - return: MD_u64, -}; - @func MD_ChopExtension: { string: MD_String8, return: MD_String8, diff --git a/source/md.h b/source/md.h index 36aaa10..5b21a82 100644 --- a/source/md.h +++ b/source/md.h @@ -657,7 +657,6 @@ MD_FUNCTION MD_String8 MD_StringSuffix(MD_String8 str, MD_u64 size); MD_FUNCTION MD_b32 MD_StringMatch(MD_String8 a, MD_String8 b, MD_StringMatchFlags flags); MD_FUNCTION MD_u64 MD_FindSubstring(MD_String8 str, MD_String8 substring, MD_u64 start_pos, MD_StringMatchFlags flags); -MD_FUNCTION MD_u64 MD_FindLastSubstring(MD_String8 str, MD_String8 substring, MD_StringMatchFlags flags); MD_FUNCTION MD_String8 MD_ChopExtension(MD_String8 string); MD_FUNCTION MD_String8 MD_SkipFolder(MD_String8 string); diff --git a/source/md_impl.c b/source/md_impl.c index 4662c09..ffe9751 100644 --- a/source/md_impl.c +++ b/source/md_impl.c @@ -259,16 +259,10 @@ MD_FindSubstring(MD_String8 str, MD_String8 substring, MD_u64 start_pos, MD_Stri return found_idx; } -MD_FUNCTION_IMPL MD_u64 -MD_FindLastSubstring(MD_String8 str, MD_String8 substring, MD_StringMatchFlags flags) -{ - return MD_FindSubstring(str, substring, 0, flags | MD_StringMatchFlag_FindLast); -} - MD_FUNCTION_IMPL MD_String8 MD_ChopExtension(MD_String8 string) { - MD_u64 period_pos = MD_FindLastSubstring(string, MD_S8Lit("."), 0); + MD_u64 period_pos = MD_FindSubstring(string, MD_S8Lit("."), 0, MD_StringMatchFlag_FindLast); if(period_pos < string.size) { string.size = period_pos; @@ -279,7 +273,9 @@ MD_ChopExtension(MD_String8 string) MD_FUNCTION_IMPL MD_String8 MD_SkipFolder(MD_String8 string) { - MD_u64 slash_pos = MD_FindLastSubstring(string, MD_S8Lit("/"), MD_StringMatchFlag_SlashInsensitive); + MD_u64 slash_pos = MD_FindSubstring(string, MD_S8Lit("/"), 0, + MD_StringMatchFlag_SlashInsensitive| + MD_StringMatchFlag_FindLast); if(slash_pos < string.size) { string.str += slash_pos+1; @@ -291,7 +287,7 @@ MD_SkipFolder(MD_String8 string) MD_FUNCTION_IMPL MD_String8 MD_ExtensionFromPath(MD_String8 string) { - MD_u64 period_pos = MD_FindLastSubstring(string, MD_S8Lit("."), 0); + MD_u64 period_pos = MD_FindSubstring(string, MD_S8Lit("."), 0, MD_StringMatchFlag_FindLast); if(period_pos < string.size) { string.str += period_pos+1; @@ -303,7 +299,9 @@ MD_ExtensionFromPath(MD_String8 string) MD_FUNCTION_IMPL MD_String8 MD_FolderFromPath(MD_String8 string) { - MD_u64 slash_pos = MD_FindLastSubstring(string, MD_S8Lit("/"), MD_StringMatchFlag_SlashInsensitive); + MD_u64 slash_pos = MD_FindSubstring(string, MD_S8Lit("/"), 0, + MD_StringMatchFlag_SlashInsensitive| + MD_StringMatchFlag_FindLast); if(slash_pos < string.size) { string.size = slash_pos;