diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs b/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs index ecbdbaf5..b6f13817 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Text/DescriptionTextBlock.cs @@ -51,7 +51,7 @@ internal sealed partial class DescriptionTextBlock : ContentControl private static void OnDescriptionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { TextBlock textBlock = (TextBlock)((DescriptionTextBlock)d).Content; - ReadOnlySpan description = (string)e.NewValue; + ReadOnlySpan description = MetadataSpecialNames.Handle((string)e.NewValue); UpdateDescription(textBlock, description); } diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Text/MetadataSpecialNames.cs b/src/Snap.Hutao/Snap.Hutao/Control/Text/MetadataSpecialNames.cs new file mode 100644 index 00000000..64bb7b39 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Control/Text/MetadataSpecialNames.cs @@ -0,0 +1,34 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using System.Text; +using System.Text.RegularExpressions; + +namespace Snap.Hutao.Control.Text; + +internal static partial class MetadataSpecialNames +{ + public static string Handle(string input) + { + if (input.AsSpan()[0] is not '#') + { + return input; + } + + StringBuilder resultBuilder = new(input); + resultBuilder + .Replace("{MATEAVATAR#SEXPRO[INFO_MALE_PRONOUN_BOYD|INFO_FEMALE_PRONOUN_GIRLD]}", SH.ControlTextMetadataSpecialNameMetaAvatarSexProD) + .Replace("{PLAYERAVATAR#SEXPRO[INFO_MALE_PRONOUN_HE|INFO_FEMALE_PRONOUN_SHE]}", SH.ControlTextMetadataSpecialNamePlayerAvatarSexPro) + .Replace("{REALNAME[ID(1)]}", SH.ControlTextMetadataSpecialNameRealNameId1); + + input = resultBuilder.ToString(); + + // {M#.}{F#.} + input = MaleFemaleRegex().Replace(input, SH.ControlTextMetadataSpecialNameMaleFemale); + + return input[1..]; + } + + [GeneratedRegex("\\{M#(.*?)\\}\\{F#(.*?)\\}")] + private static partial Regex MaleFemaleRegex(); +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowSubclass.cs b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowSubclass.cs index b4464981..749e1c8c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowSubclass.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowSubclass.cs @@ -96,7 +96,7 @@ internal sealed class WindowSubclass : IDisposable { if (window is IMinMaxInfoHandler handler) { - handler.HandleMinMaxInfo(ref *(MINMAXINFO*)lParam.Value, options.GetRasterizationScale()); + handler.HandleMinMaxInfo(ref *(MINMAXINFO*)lParam, options.GetRasterizationScale()); } break; @@ -118,7 +118,7 @@ internal sealed class WindowSubclass : IDisposable { if (window.SystemBackdrop is IBackdropNeedEraseBackground) { - return (LRESULT)(int)(BOOL)true; + return (LRESULT)(int)BOOL.TRUE; } break; diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx index 04f09969..b04ece4a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx @@ -159,6 +159,18 @@ 列表 + + 旅行者(男):$1\r\n旅行者(女):$2 + + + 王子/公主 + + + 他/她 + + + 流浪者 + 数据库已损坏:{0} diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/Foundation/BOOL.cs b/src/Snap.Hutao/Snap.Hutao/Win32/Foundation/BOOL.cs index ad61b32f..439441b1 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/Foundation/BOOL.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/Foundation/BOOL.cs @@ -5,13 +5,17 @@ namespace Snap.Hutao.Win32.Foundation; internal readonly struct BOOL { + public static readonly BOOL TRUE = 1; + public readonly int Value; public BOOL(bool value) => Value = value ? 1 : 0; public static unsafe implicit operator int(BOOL value) => *(int*)&value; + public static unsafe implicit operator BOOL(int value) => *(BOOL*)&value; + public static implicit operator BOOL(bool value) => new(value); - public static implicit operator bool(BOOL value) => value.Value != 0; + public static implicit operator bool(BOOL value) => value != 0; } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Win32/Foundation/LPARAM.cs b/src/Snap.Hutao/Snap.Hutao/Win32/Foundation/LPARAM.cs index b6973058..4c0557f8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Win32/Foundation/LPARAM.cs +++ b/src/Snap.Hutao/Snap.Hutao/Win32/Foundation/LPARAM.cs @@ -6,4 +6,6 @@ namespace Snap.Hutao.Win32.Foundation; internal readonly struct LPARAM { public readonly nint Value; + + public static unsafe implicit operator void*(LPARAM value) => *(void**)&value; } \ No newline at end of file