mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
Add Mixed Case options for byte strings.
This commit is contained in:
parent
d6d4a0db4c
commit
b3f048bfe6
2 changed files with 39 additions and 1 deletions
|
|
@ -9,6 +9,10 @@ public static unsafe partial class ByteStringFunctions
|
|||
.Select( i => ( byte )char.ToLowerInvariant( ( char )i ) )
|
||||
.ToArray();
|
||||
|
||||
private static readonly byte[] AsciiUpperCaseBytes = Enumerable.Range( 0, 256 )
|
||||
.Select( i => ( byte )char.ToUpperInvariant( ( char )i ) )
|
||||
.ToArray();
|
||||
|
||||
// Convert a byte to its ASCII-lowercase version.
|
||||
public static byte AsciiToLower( byte b )
|
||||
=> AsciiLowerCaseBytes[ b ];
|
||||
|
|
@ -17,6 +21,14 @@ public static unsafe partial class ByteStringFunctions
|
|||
public static bool AsciiIsLower( byte b )
|
||||
=> AsciiToLower( b ) == b;
|
||||
|
||||
// Convert a byte to its ASCII-uppercase version.
|
||||
public static byte AsciiToUpper( byte b )
|
||||
=> AsciiUpperCaseBytes[ b ];
|
||||
|
||||
// Check if a byte is ASCII-uppercase.
|
||||
public static bool AsciiIsUpper( byte b )
|
||||
=> AsciiToUpper( b ) == b;
|
||||
|
||||
// Check if a byte array of given length is ASCII-lowercase.
|
||||
public static bool IsAsciiLowerCase( byte* path, int length )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -25,6 +25,32 @@ public sealed unsafe partial class Utf8String
|
|||
? new Utf8String().Setup( ByteStringFunctions.AsciiToLower( _path, Length ), Length, null, true, true, true, IsAsciiInternal )
|
||||
: this;
|
||||
|
||||
// Convert the ascii portion of the string to mixed case (i.e. capitalize every first letter in a word)
|
||||
// Clones the string.
|
||||
public Utf8String AsciiToMixed()
|
||||
{
|
||||
var length = Length;
|
||||
if( length == 0 )
|
||||
{
|
||||
return Empty;
|
||||
}
|
||||
|
||||
var ret = Clone();
|
||||
var previousWhitespace = true;
|
||||
var end = ret.Path + length;
|
||||
for( var ptr = ret.Path; ptr < end; ++ptr )
|
||||
{
|
||||
if( previousWhitespace )
|
||||
{
|
||||
*ptr = ByteStringFunctions.AsciiToUpper( *ptr );
|
||||
}
|
||||
|
||||
previousWhitespace = char.IsWhiteSpace( ( char )*ptr );
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Convert the ascii portion of the string to lowercase.
|
||||
// Guaranteed to create an owned copy.
|
||||
public Utf8String AsciiToLowerClone()
|
||||
|
|
@ -37,7 +63,7 @@ public sealed unsafe partial class Utf8String
|
|||
{
|
||||
var ret = new Utf8String();
|
||||
ret._length = _length | OwnedFlag | NullTerminatedFlag;
|
||||
ret._path = ByteStringFunctions.CopyString(Path, Length);
|
||||
ret._path = ByteStringFunctions.CopyString( Path, Length );
|
||||
ret._crc32 = Crc32;
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue