Bring messagebox format parsing more in line with printf/vanilla
The follow up to !4867 (merged) no one asked for. Arguably partially part of #5868. Closes #8732 (closed).
I'm fairly sure Bethesda simply forwarded everything to whatever version of printf they had at the time. The implementation currently in master is remarkably lacking in terms of matching printf. Probably because no one actually uses anything much more complicated than %.1f.
I've added tests for things that worked in the console. I'm not convinced s, S, F, d, and i work at all. They either crash or only print 0s. Though I was testing with global variables so the latter two might fare better in an actual script where everything isn't always a float. Either way, I need them to work for !4873 (merged) so whatever.
The hex floats don't get tests because they're technically wrong. They don't come with the 0x prefix and std::format doesn't appear to have a way to enable that for floats. Interestingly, fmt apparently does have it. I imagine something get discarded in the standardization process. Note that fixing this isn't simply a matter of prepending 0x because of sign markers and padding. I'm not advocating for anyone to fix this ever. No one has ever even reported the format missing.
Anyway, the most interesting part of this MR is the change from parsing padding to parsing flags. This allows a more esoteric range of strings to be parsed. Note that the ' flag mentioned on Wikipedia doesn't work in Morrowind.exe.