mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 03:47:35 +00:00
AK+Format: Clean up format specifier parsing using GenericLexer.
Also adds support for replacement fields.
This commit is contained in:
parent
ebe1288aea
commit
6a2f5f4522
3 changed files with 165 additions and 134 deletions
10
AK/Format.h
10
AK/Format.h
|
@ -40,7 +40,7 @@ struct Formatter;
|
|||
|
||||
struct TypeErasedParameter {
|
||||
const void* value;
|
||||
void (*formatter)(StringBuilder& builder, const void* value, StringView specifier, Span<const TypeErasedParameter> parameters);
|
||||
void (*formatter)(StringBuilder& builder, const void* value, StringView flags, Span<const TypeErasedParameter> parameters);
|
||||
};
|
||||
|
||||
} // namespace AK
|
||||
|
@ -48,11 +48,11 @@ struct TypeErasedParameter {
|
|||
namespace AK::Detail::Format {
|
||||
|
||||
template<typename T>
|
||||
void format_value(StringBuilder& builder, const void* value, StringView specifier, AK::Span<const TypeErasedParameter> parameters)
|
||||
void format_value(StringBuilder& builder, const void* value, StringView flags, AK::Span<const TypeErasedParameter> parameters)
|
||||
{
|
||||
Formatter<T> formatter;
|
||||
|
||||
formatter.parse(specifier);
|
||||
formatter.parse(flags);
|
||||
formatter.format(builder, *static_cast<const T*>(value), parameters);
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ struct StandardFormatter {
|
|||
size_t m_width = value_not_set;
|
||||
size_t m_precision = value_not_set;
|
||||
|
||||
void parse(StringView specifier);
|
||||
void parse(StringView flags);
|
||||
};
|
||||
|
||||
template<>
|
||||
|
@ -135,7 +135,7 @@ Array<TypeErasedParameter, sizeof...(Parameters)> make_type_erased_parameters(co
|
|||
return { TypeErasedParameter { ¶meters, Detail::Format::format_value<Parameters> }... };
|
||||
}
|
||||
|
||||
void vformat(StringBuilder& builder, StringView fmtstr, Span<const TypeErasedParameter>, size_t argument_index = 0);
|
||||
void vformat(StringBuilder& builder, StringView fmtstr, Span<const TypeErasedParameter>);
|
||||
void vformat(const LogStream& stream, StringView fmtstr, Span<const TypeErasedParameter>);
|
||||
|
||||
} // namespace AK
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue